Buscar

Aula 08

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 21 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 21 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 21 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
Aula 8- Persistência de dados
Tema da Apresentação
PERSISTÊNCIA DE DADOS – AULA8
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Conteúdo Programático desta aula
Entender como funciona a persistência de dados com o RMS (Record Management System);
Tema da Apresentação
PERSISTÊNCIA DE DADOS – AULA8
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Armazenamento Permanente
Todo dispositivo móvel compatível com MIDP mantém uma área de memória dedicada ao armazenamento persistente de dados da aplicação.
 Os dados salvos nessa área de memória dedicada são mantidos mesmo se o dispositivo for desligado ou se a fonte de energia do dispositivo for removida.
API RMS (Record Management System) nos permite acessar essa área de memória dedicada ao armazenamento persistente de dados da aplicação e que provê um mecanismo uniforme para criar, destruir e modificar dados.
A API RMS garante a portabilidade para MIDlets (aplicações) em diferentes dispositivos, porque mapeia (abstrai) as capacidades que são dependentes da plataforma do dispositivo e as disponibiliza em um formato padrão, simplificando o desenvolvimento, pois os dispositivos móveis podem ser diferentes internamente, tanto no funcionamento de seus circuitos, quanto na localização física e nas capacidades de armazenamento de dados.
Tema da Apresentação
PERSISTÊNCIA DE DADOS – AULA8
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
O Objeto de Armazenamento
A classe RecordStore representa o banco de dados da aplicação e possui a capacidade de armazenar registros na área de memória dedicada ao armazenamento persistente de dados da aplicação.
Esta área pode conter zero, um ou mais registros;
Quando um MIDlet é removido, sua área de memória persistente também é removida, ou seja, todos os dados gravados pelo usuário nessa área criada por meio da classe RecordStore também são excluídos.
Como em todo o Java, o nome dado a uma área de memória persistente é sensível a caracteres minúsculos e maiúsculos e, no máximo, pode ter até 32 caracteres no padrão de codificação Unicode;
Uma classe RecordStore pode ser compartilhado para outros MIDlets desde que ele esteja dentro de um mesmo MIDlet suite (arquivo JAR) ou desde que a especificação MIDP permita chama-lo externamente em outra MIDlet suite através de um nome único. 
Tema da Apresentação
PERSISTÊNCIA DE DADOS – AULA8
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Exemplo de duas suítes acessando o mesmo banco de dados
Tema da Apresentação
PERSISTÊNCIA DE DADOS – AULA8
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Arquitetura do RMS
Tema da Apresentação
PERSISTÊNCIA DE DADOS – AULA8
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Manipulação de Registros
Os dados são armazenados em registros. E para que possamos identificar cada elemento, é preciso definir um campo Chave (“ID de registro”) único a fim de manipula-lo e criar uma ligação com o elemento real. 
 Este campo Chave é a mesma Chave Primária dos Bancos de Dados, só que extremamente simplificado.
O tipo de todo “ID de registro” é sempre do tipo inteiro (int). Também não há qualquer suporte para recursos que estão presentes na maioria dos bancos de dados relacionais, tais como tabelas, linhas, colunas, tipos de dados, e assim por diante.
Apesar da simplicidade, as operações suportadas para manipulação de registros são suficientes, pois podemos: adicionar um registro ao banco, remover um registro, alterar um registro, obter um registro salvo anteriormente e listar todos os registros existentes através de enumeração.
O registro é um arranjo de bytes (byte[]) e o desenvolvedor da aplicação deve definir como os elementos de dados serão colocados e retirados de dentro dele.
Tema da Apresentação
PERSISTÊNCIA DE DADOS – AULA8
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Tratamento de erros
Para utilizar a classe RecordStore é necessário utilizar as instruções de tratamento de erros da linguagem Java (try / catch), pois erros podem ocorrer durante as operações com os dados, tais como os relacionados na ilustração:
Tema da Apresentação
PERSISTÊNCIA DE DADOS – AULA8
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Tipos de Erros
InvalidRecordIDException
Usado para indicar um número de registro inválido. Esse erro ocorrerá se o método RecordStore.getRecord(int) chamar um registro que não existe.
RecordStoreException
Usado para indicar um erro genérico relativo ao contexto do RMS.
RecordStoreFullException
Sinaliza o esgotamento da capacidade para armazenamento de registros. Esse erro ocorrerá quando o método RecordStore.addRecord(byte[], int, int) for chamado para adicionar um novo registro e não houver mais capacidade no dispositivo móvel para adicioná-lo.
RecordStoreNotFoundException
Indica que o nome do banco de dados utilizado pela classe RecordStore não foi encontrado. Esse erro ocorrerá RecordStore.deleteRecordStore (String) for chamado com um nome de banco de dados que não existe.
RecordStoreNotOpenException
Usado para indicar que o banco de dados utilizado pela classe RecordStore não foi aberto. 
Tema da Apresentação
PERSISTÊNCIA DE DADOS – AULA8
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Banco de Dados
Para que possamos trabalhar com os registros, primeiramente é preciso abrir o banco de dados que a classe RecordStore necessita acessar. Ex.:
RecordStore.openRecordStore("NomeDoBanco", true);
Sobre o último parâmetro do método openRecordStore (String, boolean):
Quando true indica que o RecordStore será aberto e, se não existir, será criado;
Quando false, indica que o RecordStore será aberto se existir, mas não será criado caso não exista.
É importante fechar um banco de dados que não esteja em uso, assim você poupa o dispositivo móvel e garante o fluxo de fechamento dos dados.
Para fechar o banco de dados da RecordStore, usamos:
	objetoRecordStore.closeRecordStore();
Você deve considerar implementar os métodos pauseApp()e destroyApp() para que eles fechem os objetos do tipo RecordStore quando a aplicação for colocada em espera ou quando for encerrada. 
Tema da Apresentação
PERSISTÊNCIA DE DADOS – AULA8
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Banco de Dados (Cont.)
Para remover um banco de dados criado, você deve utilizar o método:
	public static void deleteRecordStore(String recordStoreName)
Para que seja possível remover (excluir) o banco de dados é necessário que ele pertença ao MIDlet que o criou, que ele não esteja em modo de somente leitura e que também esteja fechado.
Tema da Apresentação
PERSISTÊNCIA DE DADOS – AULA8
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Manipulando Registros
Cada registro pode ser lido, localizado, removido ou modificado, segundo seu “ID de registro” 
Todos os dados são tratados como arranjo de bytes (byte[]) 
Para nos auxiliar no tratamento e nas conversões dos tipos de dados, utilizamos objetos das classes ByteArrayInputStream, DataInputStream, ByteArrayOutputStream e DataOutputStream do pacote java.io.* na manipulação dos registros.
Tema da Apresentação
PERSISTÊNCIA DE DADOS – AULA8
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Adicionando um Registro
Para salvar (incluir) um novo registro, usamos o método:
	public int addRecord(byte[] data, int offset, int numBytes)
Tema da Apresentação
PERSISTÊNCIA DE DADOS – AULA8
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Adicionando um Registro (cont.)
Na linha 13, a classe ByteArrayOutputStream constrói um objeto capaz de armazenar os bytes que serão salvos posteriormente como arranjo de bytes pelo método addRecord. 
Na linha 14, a classe DataOutputStream recebe o objeto capaz de armazenar os bytes e cria um novo objeto capaz de gravar nele, através de métodos write 
(linhas 15, 16 e 17) - repare como é tratado o conteúdo passado no parâmetro do método adicionarRegistro (“codigo", “descricao” e “quantidade”) 
Temos o método writeUTF para o tipo String (texto) e writeInt para o tipo int (inteiro). 
Por fim, na linha 18, a variável“registro” recebe o arranjo de bytes com os dados gravados e os armazena através do método addRecord (linha 19) no banco de dados.
Tema da Apresentação
PERSISTÊNCIA DE DADOS – AULA8
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Alterando um Registro
Para alterar um registro que já foi salvo, usamos o método:
	public void setRecord(int recordId, byte[] newData, int offset, int numBytes)
Tema da Apresentação
PERSISTÊNCIA DE DADOS – AULA8
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Alterando um Registro (cont.)
Perceba que o código é praticamente o mesmo do exemplo anterior, salvo que temos um parâmetro novo que identifica o registro a ser modificado (int id) 
Na linha 19, ao invés de usarmos addRecord usamos setRecord. 
A mecânica é praticamente a mesma, ou seja, a classe ByteArrayOutputStream constrói um objeto capaz de armazenar os bytes que serão salvos posteriormente como arranjo de bytes pelo método setRecord por meio do código identificador de registro. 
A classe DataOutputStream recebe o objeto capaz de armazenar os bytes e cria um novo objeto capaz de gravar nele, através de métodos write. 
Por fim, a variável “registro” recebe o arranjo de bytes com os dados gravados e os armazena através do método setRecord no banco de dados em conformidade com o “ID de registro” (id) especificado.
Tema da Apresentação
PERSISTÊNCIA DE DADOS – AULA8
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Lendo um Registro
Para obter um registro salvo, usamos o método:
	public byte[] getRecord(int recordID)
Tema da Apresentação
PERSISTÊNCIA DE DADOS – AULA8
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Lendo um Registro (cont.)
Na linha 20, o método getRecord armazenará na variável “registro” como um arranjo de bytes (byte[]) o registro do banco de dados em conformidade com o código identificador de registro (id). 
Na linha 22, esse arranjo de bytes é armazenado em um objeto do tipo ByteArrayInputStream 
Na linha 23, associado para um outro objeto do tipo DataInputStream que separará cada campo desse registro, através dos métodos read – 
Observe as linha 26, 27 e 28, note que temos métodos readUTF e readInt
Tema da Apresentação
PERSISTÊNCIA DE DADOS – AULA8
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Apagando um Registro
Para remover um registro salvo, usamos o método:
	public void deleteRecord(int recordID)
Tema da Apresentação
PERSISTÊNCIA DE DADOS – AULA8
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Apagando um Registro (cont.)
Na linha 20, o método getRecord armazenará na variável “registro” como um arranjo de bytes (byte[]) o registro do banco de dados em conformidade com o código identificador de registro (id). 
Na linha 22, esse arranjo de bytes é armazenado em um objeto do tipo ByteArrayInputStream 
Na linha 23, associado para um outro objeto do tipo DataInputStream que separará cada campo desse registro, através dos métodos read – 
Observe as linha 26, 27 e 28, note que temos métodos readUTF e readInt
Tema da Apresentação
PERSISTÊNCIA DE DADOS – AULA8
PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS
*
Fim.
Tema da Apresentação

Outros materiais