framework celepar manual de utilização de banco

Transcrição

framework celepar manual de utilização de banco
FRAMEWORK ­ CELEPAR
MANUAL DE UTILIZAÇÃO DE BANCO DE DADOS EM POCKET PC
Junho – 2006
Sumário de Informações do Documento
Tipo do Documento: Relatório
Título do Documento: MANUAL DE UTILIZAÇÃO DE BANCO DE DADOS EM POCKET PC
Estado do Documento: Elaborado
Responsáveis: Natasha Krassuski Fortes
Palavras-Chaves: pocket, PDA, java, superwaba, Banco de Dados, Catalog
Resumo:
Número de páginas:
Software utilizados:
Versão
Data
Mudanças
1.0
22/06/2006
Criação por Natasha
Revisão por Elisabeth Hoffmann
SUMÁRIO
1. INTRODUÇÃO....................................................................................................4
1.1 OBJETIVO......................................................................................................................4
2. AVALIAÇÃO – TIPOS DE BANCO DE DADOS......................................................5
2.1
2.2
2.3
2.4
2.5
2.6
CATALOG......................................................................................................................5
PDBDRIVER.................................................................................................................5
ORACLE LITE.................................................................................................................5
DB2 EVERYPLACE..........................................................................................................5
MICROSOFT SQL SERVER CE...........................................................................................6
SYBASE ULTRALITE.........................................................................................................6
3. CATALOG............................................................................................................7
3.1 FUNCIONAMENTO............................................................................................................7
4. EASYCATALOG...................................................................................................8
4.1 API
DE UTILIZAÇÃO DA CLASSE
CATALOG...........................................................................8
4. ORIENTAÇÕES...................................................................................................9
4.1 PADRONIZAÇÃO PARA O CATALOG.........................................................................................9
4.2 DESENHO DA BASE DE DADOS.............................................................................................9
4.3 PDBEDITOR.................................................................................................................9
ANEXO 1 – CLASSE EXEMPLO DE USO DO CATALOG.........................................10
ANEXO 2 – CLASSE EASYCATALOG E EXEMPLO DE USO....................................13
ANEXO 3 – TUTORIAL SOBRE O PDBEDITOR ....................................................16
4
1. INTRODUÇÃO
1.1 Objetivo
O objetivo deste documento é padronizar um Banco de Dados para utilização no Pocket PC homologado (modelo da ASUS MyPal A620), operando em conjunto com o SuperWaba, que é a máquina virtual java homologada para ele. Plataforma de Desenvolvimento PINHÃO PARANÁ- CELEPAR
5
2. AVALIAÇÃO – TIPOS DE BANCO DE DADOS
2.1 Catalog
O Catalog é um pacote fornecido pelo SuperWaba de manipulação de dados feita em Java e foi escolhida para utilização devido ao fato de ser disponibilizada de forma gratuita e possuir uma simples forma de utilização. Essa classe permite a inserção, exclusão, atualização e busca linear de registros nos arquivos PDB (Palm DataBase).
2.2 PDBDriver
O PDBDriver é uma interface de Banco de dados (WDBC) que permite manipular os arquivos PDB usando SQL (Select, Insert, Delete, Update), além de outros recursos como funções de agregação (AVG, MAX, MIN, SUM, GROUP BY), ordenação (ORDER BY) e criação de índices. Essa interface não foi escolhida pois ela está disponível apenas no pacote Profissional, que é pago.
2.3 Oracle Lite
O Oracle Lite Mobile Server foi construído sob o sistema do Oracle9i e possui uma estrutura XML. Possui dois componentes principais: o Oracle Lite Mobile Server que gerencia os bancos de dados móveis e o sincronismo entre aplicações e dispositivos móveis e o Oracle Lite Mobile Development Kit que permite o desenvolvimento de aplicações para várias plataformas. 2.4 DB2 Everyplace
É o banco de dados relacional da IBM para pequenos dispositivos. Possui aproximadamente 150Kb. Permite tanto o uso de banco de dados local quanto remoto, além de possuir sincronismo bidirecional com os SGDBs corporativos. É uma solução proprietária.
Plataforma de Desenvolvimento PINHÃO PARANÁ- CELEPAR
6
2.5 Microsoft SQL Server CE
O Microsoft SQL Server CE é um banco de dados relacional que pode ser utilizado local, ou conectado a um servidor. Suporta a sintaxe de consulta da Linguagem SQL. Também é uma solução proprietária.
2.6 Sybase UltraLite
O Sybase UltraLite possui sincronismo com os SGDBs da Sybase e com produtos de outros fabricantes. Inclui as funcionalidades da SQL como processamento de transações, integridade referencial e operações de junções de várias tabelas. Também é uma solução proprietária.
Plataforma de Desenvolvimento PINHÃO PARANÁ- CELEPAR
7
3. CATALOG
3.1 Funcionamento
O Catalog consiste em um vetor de registros, sendo que cada registro pode ter um tamanho diferente, não possuindo índices, tabelas ou campos definidos. Uma desvantagem é que apenas a aplicação e o analista conhecem o formato e o conteúdo dos registros. Apresenta duas restrições em relação aos registros: o número de registros em um arquivo de dados é de 65536 e o limite de tamanho do registro é de 64Kb.
A tabela 1 a seguir mostra os principais métodos a serem utilizados pelo desenvolvedor para fazer a persistência dos dados através do SuperWaba:
tabela 1
No anexo 1 tem uma classe de exemplo que possui todas as operações do Catalog relacionadas com um arquivo de produtos, tais como inserção, atualização, pesquisa e remoção de produtos dentro de um arquivo pdb.
Plataforma de Desenvolvimento PINHÃO PARANÁ- CELEPAR
8
4. EASYCATALOG
4.1 API de utilização da classe CATALOG
A EasyCatalog é uma API que simplifica os processos de leitura, gravação, alteração e remoção. Auxilia com métodos de busca de registros e inserção de dados, criando também as “tabelas” Catalog.
Essa API implementa os seguintes métodos:
public EasyCatalog(String creator, int type): construtor da classe que é responsável por criar o Catalog.
public String read(int recordPos): método que lê uma posição do Catalog. Como parâmetro recebe a posição a ser lida.
public int add(int recordPos, String s, String function): método que insere ou altera um registro. Recebe como parâmetros a posição do dado a ser inserido, o dado propriamente dito e como último parâmetro as letras “I” ou “U”, “Insert” para inserir ou “Update” para alterar o que já estava gravado na posição passada como parâmetro.
public void delete(int recordPos): remove o registro da posição passada como parâmetro.
A classe que disponibiliza esses recursos encontra­se no Anexo 2 junto com um exemplo de sua utilização fornecido pelo desenvolvedor.
Plataforma de Desenvolvimento PINHÃO PARANÁ- CELEPAR
9
4. ORIENTAÇÕES
4.1 Padronização para o Catalog.
Nos arquivos do Catalog cada linha pode ter um número diferenciado de colunas. Seu funcionamento assemelha­se ao de um ResultSet, porém não tem como buscar o dado pelo label ou posição pois o Catalog não possui o conceito de label de colunas. Para buscar um dado é preciso percorrer os registros até chegar no dado desejado.
Para facilitar a tarefa do analista e do desenvolvedor estabeleceremos alguns padrões que deverão ser seguidos:
4.2 Desenho da Base de dados.
Para aproximar os conceitos já empregados pela Plataforma PINHÃO a modelagem da base de dados em Pocket­PC deverá ser feita e “enxergada” como uma base relacional e o analista poderá utilizar a ferramenta DBDesigner4 para desenhar a base de dados.
A referência principal para o desenvolvedor será o diagrama de classes (feito com a ferramenta RSM) seguindo o mesmo padrão de nomenclatura já definido no PINHÃO.
A Base de dados (database) da aplicação deverá ser o diretório /BD (individual para cada aplicativo) onde os arquivos (.PDB) do Catalog deverão estar armazenados, sendo que cada um desses arquivos correspondem a uma tabela.
4.3 PDBEditor
O PDBEditor é um software para editar arquivos .PDB. Com ele é possível criar, ler e alterar arquivos .pdb em uma interface gráfica de fácil utilização.
Essa aplicação vem no pacote do celepar­pocketpc e para executá­la basta utilizar o seguinte comando:
java -jar /usr/share/java/SuperWabaSDK/bin/PdbEditor.jar
O anexo 3 é um tutorial de utilização desse programa.
Plataforma de Desenvolvimento PINHÃO PARANÁ- CELEPAR
10
ANEXO 1 – CLASSE EXEMPLO DE USO DO CATALOG
Esta classe de exemplo faz parte do projeto Sales que fica no diretório de exemplos do SDK do SuperWaba.
(productDB.java)
/*
* ProductDB.java possui todas as operações do Catalog relacionadas com o aquivo Products.pdb, inserção
* atualização, pesquisa e remoção de produtos dentro do arquivo pdb. Perceba que essa classe
* extende Catalog, que é uam boa prática de programação no SuperWaba. Esse * programa utiliza um método de pesquisa sequencial, mas não tem problemas para uma aplicação
* com pequenos registros.
*/ package superwaba.samples.app.sales.cat;
import waba.util.Vector;
import waba.io.*;
public class ProductDB extends Catalog
{
public static ProductDB instance = new ProductDB();
private ResizeStream rs;
private DataStream ds;
/**
* Construtor que cria ou abre (se já existir) o arquivo Products.pdb,
* adiciona o ResizeStream e o DataStream. A maneira pragmática de ler/escrever
* em um Catalog é por meio de adições de streams (ResizeStream/DataStream), então
* o redimencionamento do Catalog e a leitura/escrita de informações serão feitas
* por essas classes.
*/ private ProductDB()
{
super("Products.SAle.DATA", Catalog.CREATE);
rs = new ResizeStream(this, 128);
ds = new DataStream(rs);
}
/**
* Esta função grava/atualiza um produto no arquivo pdb
* * @param p
* produto a ser gravado/atualizado
* @param update
* booleano que indica se é para atualizar ou criar um novo registro (produto)
*/
public void write(Product p, boolean update)
{
if (update)
{
int n = indexOf(p);
if (n == ­1 || !rs.restartRecord(n)) return;
}
else
{
rs.startRecord();
}
p.saveTo(ds);
rs.endRecord();
}
/**
* Esta função lê um produto no arquivo pdb
* * @return o produto do arquivo pdb
*/ public Product read()
Plataforma de Desenvolvimento PINHÃO PARANÁ- CELEPAR
11
{
return new Product(ds);
}
/**
* Lê o nome de todos os produtos disponíveis no arquivo pdb
* * @return um vetor contendo o nome de todos os produtos disponíveis
*/ public String[] readAllNames()
{
int n = getRecordCount();
String []ss = new String[n];
for (int i = 0; i < n; i++)
if (this.setRecordPos(i))
ss[i] = read().name;
return ss;
}
/**
* Pesquisa por um produto dentro do arquivo pdb de acordo com os campos de pesquisa
* * @param name
* Nome do produto
* @param code
* Código do produto
* @return um vetor contendo os produtos pesquisados, se nenhum produto for encontrado,
* o contador de elementos do vetor será zero.
*/ public Vector search(String name, String code)
{
boolean a, b, all;
Vector v = new Vector();
a = name.length() != 0;
b = code.length() != 0;
all = !a && !b;
int n = this.getRecordCount();
for (int i = 0; i < n; i++)
{
if (this.setRecordPos(i))
{
Product pro = read();
if (!all)
{
if (a && pro.name.indexOf(name) < 0) continue;
if (b && !pro.code.equals(code)) continue;
}
v.add(pro);
}
}
return v;
}
/**
* Remove um produto específico do arquivo pdb. Para deletar um registro específico
* do arquivo pdb é necessário setar a posição do registro específico * para depois chamar o método deleteRecord(), que irá remover o registro da
* sua posição atual.
* * @param pro
* Produto a ser removido
*/ public void remove(Product pro)
{
Plataforma de Desenvolvimento PINHÃO PARANÁ- CELEPAR
12
int n = indexOf(pro);
if (n >= 0 && this.setRecordPos(n)) this.deleteRecord();
}
/**
* Encotra o indíce (posição) de um registro (produto) dentro do arquivo pdb.
* Muito útil para operações de atualização e remoção de registros.
* * @param pro
* O produto a ser encontrado
* @return o índice do produto ou ­1 quando não encontra o produto
*/ public int indexOf(Product pro)
{
for (int n = this.getRecordCount() ­ 1; n >= 0; n­­)
if (this.setRecordPos(n))
{
Product p = read();
if (p.code.equals(pro.code)) return n;
}
return ­1;
}
/**
* Retorna informações do produto baseado em seu código.
* * @param prodcode
* O código do produto
* @return o produto se encontrado ou null caso contrário
*/ public Product getFromCode(String prodcode) // info
{
for (int n = this.getRecordCount() ­ 1; n >= 0; n­­)
if (this.setRecordPos(n))
{
Product p = read();
if (prodcode.equals(p.code)) return p;
}
return null;
}
/**
* Retorna o produto com base em seu nome
* * @param prodname
* O nome do produto
* @return o produto se for encontrado ou null caso contrário
*/ public Product getFromName(String prodname) // infoName
{
for (int n = this.getRecordCount() ­ 1; n >= 0; n­­)
if (this.setRecordPos(n))
{
Product p = read();
if (prodname.equals(p.name)) return p;
}
return null;
}
}
Plataforma de Desenvolvimento PINHÃO PARANÁ- CELEPAR
13
ANEXO 2 – CLASSE EASYCATALOG E EXEMPLO DE USO
import waba.io.*;
/**
* Title:
* Description: * Copyright: Copyright (c) 2004
* Company: InformaXXIma Processamento de Dados
* www.informaxxima.com.br
* @author Renan Bundt
* @version 1.0
*/
public class EasyCatalog extends Catalog
{
private byte [] b;
public EasyCatalog(String creator, int type)
{
super(creator,type);
}
/*
* Lê a partir da posição indicada
*/
public String read(int recordPos) {
setRecordPos(recordPos);
int f = getRecordSize();
b = new byte[f];
readBytes(b, 0, f);
return new String(b);
}
/*
* Método utilizado pela classe
*/
public byte[] getByteArray() {
return b;
}
/* * No método 'add', você pode adicionar novos dados ou atualizá­los
* Para adicionar um dado faça da seguinte maneira: add(0, "dado", "I"); * "I" ­ 'I'nsert (insere um dado)
* Para autalizar um dado faça da seguinte maneira: * int i = YOURTCATALOG.getRecordPos();
*
add(i, "add this", "U"); * "U" ­ 'U'pdate (atualiza um dado)
*/
public int add(int recordPos, String s, String function) {
if (function.equals("I")) recordPos = addRecord(s.length());
setRecordPos(recordPos);
return writeBytes(s.getBytes(), 0, s.length());
}
/*
*Remove um um dado
*/
public void delete(int recordPos)
{
setRecordPos(recordPos);
Plataforma de Desenvolvimento PINHÃO PARANÁ- CELEPAR
14
deleteRecord();
}
}
Exemplo de uso da classe EasyCatalog
/*
Pequeno exemplo de como a EasyCatalog funciona.
*/
import waba.ui.*;
public class Teste extends MainWindow {
private EasyCatalog func = new EasyCatalog("PO_FUNC.CRTK.TYPK",EasyCatalog.CREATE);
private Button btnGrava;
private Button btnDel;
private Button btnRead;
private Button btnUpdate;
public Teste() {
add(btnGrava = new Button("Gravar"), CENTER, CENTER);
add(btnUpdate = new Button("Update"), CENTER, CENTER+20);
add(btnDel = new Button("Deletar"), CENTER, CENTER+40);
add(btnRead = new Button("Read"), CENTER, CENTER+60);
}
public void onEvent(Event e) {
switch (e.type) {
case ControlEvent.PRESSED:
if (e.target == btnGrava) {
func.add(0, "Registro Incluido!", "I");
String[] btn ={"OK"};
MessageBox mb = new MessageBox("Inclusao","Registro Incluido!",btn);
mb.popupBlockingModal();
add(new Label("Registro Incluido!"), CENTER, CENTER­30);
}else if (e.target == btnRead) {
Plataforma de Desenvolvimento PINHÃO PARANÁ- CELEPAR
15
String s = func.read(0);
String[] btn ={"OK"};
MessageBox mb = new MessageBox("Leitura","Lido: "+s,btn);
mb.popupBlockingModal();
add(new Label("Lido:"+s), CENTER, CENTER­30);
} else if (e.target == btnUpdate) {
func.add(0, "Registro Alterado!", "U");
String[] btn ={"OK"};
MessageBox mb = new MessageBox("Alteracao","Registro Alterado!",btn);
mb.popupBlockingModal();
add(new Label("Registro Alterado!"), CENTER, CENTER­30);
} else if (e.target == btnDel) {
func.delete(0);
String[] btn ={"OK"};
MessageBox mb = new MessageBox("Exclusao","Registro Excluido!",btn);
mb.popupBlockingModal();
add(new Label("Registro Excluido!"), CENTER, CENTER­30);
}
}
}
}
Plataforma de Desenvolvimento PINHÃO PARANÁ- CELEPAR
16
ANEXO 3 – TUTORIAL SOBRE O PDBEDITOR (Fonte: http://www.clubepda.com.br/ultimas.asp?pid=7
Bem-Vindo ao PDBEditor, software para edição de Arquivos PDB do Palm. Com ele é
possível ler e gravar arquivos PDB usados pelas ferramentas PocketStudio, NSBasic,
AppForge para PalmOS, J2ME/SuperWaba e CodeWarrior/Falch.net, basta fornecer a
estrutura dos campos e a edição é feita de modo visual.
PDBEditor é um software MDI, isto quer dizer que você pode abrir mais de uma
edição de arquivo ao mesmo tempo, simplesmente selecionando os arquivos desejados.
Quando a tela principal da aplicação é aberta, o menu principal aparece no formulário,
bem como a ToolBar com as opções disponíveis.
Abrindo/Criando um Arquivo PDB
O modo de Abrir ou Criar um arquivo PDB é bem simples. Inicialmente, selecione o
botão Abrir/Criar no menu principal; esta opção dará acesso à tela de configuração do
arquivo PDB.
Informações necessárias para a Visualização ou Criação do Arquivo PDB:
Campo Arquivo PDB: Neste campo você deve informar o diretório completo
mais o nome do arquivo PDB que deseja abrir ou criar. O nome do arquivo
deve ter a extensão .PDB. Caso você queira localizar o diretório ou o arquivo
PDB visualmente, pressione o botão ao lado do campo e navegue até o local
desejado. Se o arquivo PDB for da ferramenta AppForge, o PDBEditor trará a
configuração dos campos automaticamente.
Na ComboBox Formato do Banco de Dados Palm, você deve escolher a
ferramenta que gerou o arquivo PDB ou que utilizará o arquivo, caso você o
esteja criando. Ao selecionar uma ferramenta, a ComboBox Tipo é carregada
com os tipos de dados suportados pela ferramenta. Esta ComboBox ficará
Plataforma de Desenvolvimento PINHÃO PARANÁ- CELEPAR
17
desabilitada se houver algum campo na Estrutura do Arquivo PDB. Ela será
habilitada novamente se você excluir todos os campos da estrutura.
Nome do Banco no Palm: Campo automaticamente carregado quando o
arquivo PDB é lido; é o nome do Banco de Dados no Palm. Até 31 caracteres.
Deve ser informado se você estiver criando o arquivo PDB.
CreatorID: CreatorID do Banco de Dados. É automaticamente carregado
quando o arquivo PDB é lido. Deve ter 4 dígitos. Deve ser informado se você
estiver criando o arquivo PDB.
DatabaseType: DatabaseType do Banco de Dados. É automaticamente
carregado quando o arquivo PDB é lido. Deve ter 4 dígitos. Deve ser informado
se você estiver criando o arquivo PDB.
Campo: Nome do Campo na estrutura do registro.
Tipo: Tipo do Campo.
Os botões abaixo da ComboBox Tipo Adiciona, Remove ou Altera um campo
na estrutura dos registros, respectivamente.
Os botões Seta para cima e para Baixo ao lado da Estrutura do Arquivo PDB,
movimentam o campo selecionado na lista de Campos.
O botão Continuar inicia a Visualização dos dados do arquivo PDB. Se houver
algum erro na estrutura informada, será emitida uma mensagem de erro e não
será possível continuar.
Erro na formatação dos registros
Se os dados apresentados na tela de Edição de Dados do arquivo PDB estiverem
com valores incorretos, é sinal que você definiu a estrutura dos campos com algum erro.
Verifique novamente se todos os campos foram informados e principalmente se os tipos
dos campos estão corretos.
Plataforma de Desenvolvimento PINHÃO PARANÁ- CELEPAR
18
Arquivo de Definição dos Campos
Ao pressionar o botão Continuar, o PDBEditor irá gravar um arquivo no mesmo
diretório do arquivo PDB, com extensão PDX, contendo as definições dos campos que
você especificou. Quando você quiser editar o mesmo arquivo PDB novamente e o
PDBEditor encontrar o arquivo PDX com o mesmo nome e no mesmo diretório do arquivo
PDB, as definições serão carregadas automaticamente.
Editando Dados
Você pode editar os dados diretamente no Grid apresentado na tela de Edição de
registros do arquivo PDB. Os campos do tipo Data, Data/Hora e Hora tem um modo
especial de edição:
Data: Deve ser preenchida no formato dd/mm/aaaa. Se a data não for
corretamente preenchida, não será possível a gravação do registro.
Data/Hora: Deve ser preenchida no formato dd/mm/aaaa hh:mm:ss. Se a
data/hora não for corretamente preenchida, não será possível a gravação do
registro.
Hora: Deve ser preenchida no formato hh:mm:ss. Se a hora não for
corretamente preenchida, não será possível a gravação do registro.
Operações permitidas:
Botão Novo Reg: Adiciona um novo registro.
Botão Apaga Reg: Remove o registro selecionado.
Botão Classifica: Classifica o Banco de Dados conforme a seleção do usuário.
Este recurso é explicado no próximo tópico.
Botão Salvar: Salva os dados no arquivo PDB. Se houver erro em alguma
informação, o registro com erro será posicionado no Grid e o nome do campo
com erro aparecerá na mensagem de erro.
Para sair da edição sem gravar os dados, selecione o botão "X" no canto
superior direito do formulário e confirme.
Plataforma de Desenvolvimento PINHÃO PARANÁ- CELEPAR
19
Classificando os registros do Arquivo PDB
O botão Classifica na tela de edição de dados pode ser usado para classificar os
dados de um arquivo PDB.
Se você desistir da classificação do arquivo PDB, basta remover todos os campos
da lista da direita e sair do formulário através do botão "X" no canto superior direito do
formulário.
Para adicionar campos à lista de classificação, basta selecionado na lista da
esquerda,
selecionar
a
ordem
na
ComboBox
entre
as
duas
listas
(Ascendente/Descendente) e pressionar o botão "+".
Para remover um campo da lista de ordenação, basta seleciona-lo na lista da
direita e pressionar o botão "-".
As setas para cima e para baixo movem o campo na lista de ordenação.
Marcio Alexandroni
ClubePDA
- A Referência do Desenvolvedor PDA.
Plataforma de Desenvolvimento PINHÃO PARANÁ- CELEPAR