Sistema de Controle de Vendas utilizando dispositivos móveis

Propaganda
CURSO DE ANÁLISE E DESENVOLVIMENTO DE SISTEMAS
DANIEL VIANA AZEVEDO
FABIANO DOS SANTOS FERNANDES
RODOLFO GOMES DO NASCIMENTO
Sistema de Controle de Vendas utilizando dispositivos móveis
CAMPOS DOS GOYTACAZES/RJ
2011
II
DANIEL VIANA AZEVEDO
FABIANO DOS SANTOS FERNANDES
RODOLFO GOMES DO NASCIMENTO
Sistema de Controle de Vendas utilizando dispositivos móveis
Monografia de Conclusão de Curso Análise e
Desenvolvimento de Sistemas apresentada no
Instituto Federal de Educação, Ciências e
Tecnologia
Orientador: Profº Ricardo José dos Santos
Barcelos, MSC.
CAMPOS DOS GOYTACAZES/RJ
2011
III
DANIEL VIANA AZEVEDO
FABIANO DOS SANTOS FERNANDES
RODOLFO GOMES DO NASCIMENTO
Sistema de Controle de Vendas utilizando dispositivos móveis
Monografia de Conclusão de Curso Análise e
Desenvolvimento de Sistemas apresentada no
Instituto Federal de Educação, Ciências e
Tecnologia
Aprovada em ___ de _______________________ de 2011
Banca Avaliadora:
__________________________________________________________________
Prof. Ricardo José dos Santos Barcelos (orientador)
Mestre em Engenharia de Produção pela UENF
Instituto Federal de Educação, Ciência e Tecnologia Fluminense.
__________________________________________________________________
Prof. Fábio Duncan de Souza
Mestre em Pesquisa Operacional e Inteligência Computacional pela UCAM
Instituto Federal de Educação, Ciência e Tecnologia Fluminense.
__________________________________________________________________
Prof. Luiz Gustavo Lourenço Moura
Mestre em Informática pela UFRJ
Instituto Federal de Educação, Ciência e Tecnologia Fluminense.
IV
RESUMO
A expansão dos dispositivos móveis vem aumentando com o passar do tempo. O grande
aumento nas vendas destes aparelhos tem várias causas, como a queda nos preços e a grande
diversidade de modelos. Essa rápida e constante popularização tem como consequência a
necessidade de criação de novos serviços e aplicações. A partir desta realidade, este projeto
consiste no desenvolvimento de um aplicativo (protótipo) baseado na realização de vendas
remotas desenvolvido na plataforma J2ME, que é direcionada para dispositivos com recursos
de hardware e software limitados. Os usuários utilizarão a aplicação instalada em um terminal
móvel (aparelho celular GSM) com acesso à Internet, onde remotamente acessarão os dados
contidos na base de dados e através deste acesso será possível realizar e visualizar vendas.
Palavras-chaves: J2ME. Terminal móvel. Vendas remotas. Base de dados.
V
ABSTRACT
The expansion of mobile devices has been increasing over time. The large increase in sales of
these devices has several causes, such as falling prices and the great diversity of models. This
rapid and sustained popularity has resulted in the need to create new services and applications.
From this fact, this project is to develop an application (prototype) based on remote execution
of sales developed in J2ME, which is aimed at devices with limited hardware and software.
The users use the application installed on a mobile handset (GSM cell phone) with internet
access, where remotely access data contained in the database and through this access will be
possible and view sales.
Keywords: J2ME. Terminal mobile. Remote sales. Database.
VI
LISTA DE FIGURAS
FIGURA 1 –Arquitetura da linguagem Java .............................................................................. 8
FIGURA 2 – Arquitetura J2ME ............................................................................................... 10
FIGURA 3 – Comunicação entre a MIDlet e o Banco de Dados ............................................. 21
FIGURA 4 – Trecho da programação utilizando o commandAction .............................................. 24
FIGURA 5 – Variáveis de busca e busca com o banco de dados ................................................... 25
FIGURA 6 – Código tentativa de conexão entre o banco e a página JSP........................................ 26
FIGURA 7 – Código de separação dos campos............................................................................ 26
FIGURA 8 – Código de ligação da MIDlet estoque.java com a classe acessoWEB.java ................. 27
FIGURA 9 – Métodos public void lerVenda() e public void inicia_thread()................................... 28
FIGURA 10 – Trecho da programação utilizando uma Estrutura de repetição .......................... 29
FIGURA 11 – Método recebedados_produto............................................................................... 30
FIGURA 12 – Objetos do formulário de Vendas ......................................................................... 30
FIGURA 13 – Command cm_gravar .......................................................................................... 31
FIGURA 14 – Método inserirVenda ........................................................................................... 31
FIGURA 15 – Código SQL de inserção ...................................................................................... 32
FIGURA 16 – Tela de lista dos produtos..................................................................................... 33
FIGURA 17 – Funcionalidades do menu..................................................................................... 34
FIGURA 18 – Formulário de Vendas ......................................................................................... 34
FIGURA 19 – Tela de lista de produtos atualizada após a venda................................................... 35
FIGURA 20 – Tela de visualização das vendas efetuadas. ............................................................ 35
FIGURA 21 – Tela de ajuda ...................................................................................................... 36
VII
LISTA DE TABELAS
TABELA 1 – Vendas mundiais de dispositivos móveis para usuários em 2010 (milhões de
unidades)..................................................................................................................................... 3
VIII
LISTA DE ABREVIATURAS E SIGLAS
API – Application Programing Interface
BSD - Berkeley Software Distribution
CDC – Connected Device Configuration
CLDC – Connected Limited Device Configuration
EJB - Enterprise JavaBeans
GSM - Global System for Mobile Communication
HTML – Hipertext Markup Language
HTTP – Hipertext Transfer Protocol
IDE - Integrated Development Environment
J2EE – Java 2 Enterprise Edition
J2ME – Java 2 Micro Edition
J2SE – Java 2 Standard Edition
JAD – Java Descriptor
JAR – Java Archive
JVM – Java Virtual Machine
KVM – Kilobyte Virtual Machine
MIDP – Mobile Information Device Profile
PC – Personal Computer
PDA – Personal Digital Assitant
PHP - Hypertext Preprocessor
URL – Unified Resource Locator
IX
SGBD – Sistema Gerenciador do Banco de dados
SQL – Structured Query Language
SSL - Security Socket Layer
SUN – Stanford University Network
XML – Extensible Markup Language
Sumário
LISTA DE ABREVIATURAS E SIGLAS ........................................................................... VIII
Capitulo I .................................................................................................................................... 3
Introdução ................................................................................................................................... 3
1.1 Motivação ......................................................................................................................... 4
1.2 Objetivo ............................................................................................................................ 5
1.3 Estrutura da Monografia ................................................................................................... 5
Capitulo II ................................................................................................................................... 7
2. Tecnologias e Ferramentas utilizadas ..................................................................................... 7
2.1 Java ................................................................................................................................... 7
2.2 J2ME – Java 2 Micro Edition ........................................................................................... 9
2.3 PostgreSQL ..................................................................................................................... 12
2.4 NetBeans ......................................................................................................................... 14
2.5 GlassFish ......................................................................................................................... 15
2.6 GSM - GlobalSystemforMobileCommunication ............................................................. 16
Capitulo III ............................................................................................................................... 18
3. Desenvolvimento do Protótipo ............................................................................................. 18
3.1 Requisitos de hardware .................................................................................................. 18
3.2 Requisitos de software .................................................................................................... 19
3.3 Diagrama de Casos de Uso ............................................................................................. 19
3.3.1 Descrição dos casos de uso ...................................................................................... 19
3.4 Estrutura de comunicação entre a MIDlet e o banco de dados ....................................... 20
3.6 Modelo Entidade Relacionamento – Banco de dados..................................................... 21
3.7 Detalhes do desenvolvimento do Projeto........................................................................ 22
Capítulo IV ............................................................................................................................... 33
4. Utilização do Protótipo ......................................................................................................... 33
Capítulo V ................................................................................................................................ 37
5. Conclusão ............................................................................................................................. 37
5.1 Trabalhos Futuros ........................................................................................................... 37
REFERÊNCIA BIBLIOGRÁFICA .......................................................................................... 38
ANEXO .................................................................................................................................... 40
3
Capitulo I
Introdução
Segundo (Bogo, 2000), a Internet é um conjunto de redes de computadores
interligadas que tem em comum protocolos e serviços, de forma que os usuários conectados
possam usufruir de serviços de informação e comunicação de alcance mundial. A cada dia
surgem novas aplicações e serviço prestado via internet para dispositivos móveis, como o
envio e leitura de e-mails, transações bancárias, acessam a redes sociais, entre outros. Isto
ocorre principalmente devido aos custos mais acessíveis e à extensa variedade de modelos e
funcionalidades existentes para esses dispositivos. São celulares, smartphones (celulares com
funcionalidades avançadas), PDAs (computador de bolso), Ipods (reprodutor de conteúdo
multimídia avançado), e os tablets (computador pessoal compacto).
Segundo estudo realizado pela (Gartner, 2010), empresa especializada em pesquisa e
aconselhamento sobre tecnologia, aponta-se que vendas de dispositivos móveis para usuários
finais totalizaram 1,6 bilhão de unidades em 2010, um aumento de 31,8% em relação ao ano
anterior. Já as vendas de smartphones aumentaram 72,1% em comparação ao mesmo período
e foram responsáveis por 19% do total das vendas de dispositivos móveis em 2010. A Tabela
1 apresenta dados do estudo feito pela Gartner.
Tabela 1 – Vendas mundiais de dispositivos móveis para usuários em 2010 (milhares de
unidades)
Fonte: Gartner (Fevereiro de 2011)
4
Com o aumento das vendas de dispositivos móveis, é comum indivíduos utilizarem
dispositivos móveis em locais como a fila do metrô, na sala de espera do consultório médico,
no ponto de parada de ônibus, para acessar informações meteorológicas, ler jornais, enviar emails, dentre as inúmeras possibilidades que estes aparelhos proporcionam.A rápida expansão
destes aparelhos possibilita a evolução e diversificação dos serviços prestados via internet, e
adaptando-os a esta nova realidade.
O termo mobilidade cada vez mais é observado no cenário tecnológico. A liberdade de
conversar com os amigos remotamente ou à distância, a partir de uma lanchonete ou
restaurante vem atraindo as pessoas de todas as classes sociais.
1.1 Motivação
Grande parte de vendedores utilizam pastas com talões de vendas, ocasionando perda
de produtividade devido ao tempo gasto no seu preenchimento e excesso de peso,
ocasionando um cansaço físico maior por conta da necessidade deste durante seu trabalho.
Também é observada a necessidade de constante comunicação entre o vendedor e a sua base
para consultar preços, disponibilidade de material, entre outras necessidades, o que gera mais
um desgaste para o mesmo.
Porem existe aplicações que visam corrigir ou minimizar esses problemas, mas em
comum estas aplicações funcionam em arquiteturas dedicadas, como o Palm (computadores
de mão), e no caso destes dispositivos, os custos são elevados em comparação com um celular
GSM com função de acesso a internet, e pode demandar um treinamento maior por parte do
usuário.
Sendo assim, vários representantes de vendas não possuem dispositivos que os
auxiliem nas vendas e na comunicação com a sua base. Para efetuar uma venda, estes
representantes necessitam ligar para a fábrica diariamente e consultar preços e a
disponibilidade do produto no estoque. As vendas não são atualizadas em tempo real,
podendo ocorrer à venda de determinado produto que já não se encontra em estoque.
A realidade apresentada motivou a criação deste projeto, que consiste no
desenvolvimento de uma aplicação (protótipo), para realização remota de vendas utilizando a
5
J2ME. Para a sua implementação, foi utilizada a interface de desenvolvimento Netbeans
(http://www.oficinadanet.com.br/artigo/1061/o_que_e_o_netbeans), por ser uma IDE não
utilizada no curso de Análise e Desenvolvimento de Sistemas, sendo assim necessário muito
estudo para sua utilização neste projeto. Também foi necessário o uso de um banco de dados
para o armazenamento dos dados. Sendo assim, foi utilizado o PostegreSQL
(http://wiki.postgresql.org/wiki/Introdu%C3%A7%C3%A3o_e_Hist%C3%B3rico), por ser
um banco de dados robusto, com instalação simples e rápida. Os aparelhos utilizados foram os
modelos 5530 e E63 da NOKIA1, que utilizam a tecnologia GSM, com sistema operacional
Symbian, e que possuem suporte à tecnologia Java/J2ME.
1.2 Objetivo
Considerando as dificuldades apresentadas, o protótipo criado é potencialmente
atrativo para vendedores, representantes comerciais e empresas do setor de vendas, tendo por
objetivo facilitar o trabalho destes profissionais, mas não resolvê-los totalmente, levando em
consideração que podem haver dificuldades quanto à sua utilização devido a fatores externos,
como perda de sinal e a falta de internet em determinadas áreas, dificuldades que poderiam
ser sanadas pelos próprios fornecedores dos serviços de telefonia e internet.
Com o protótipo desenvolvido, o usuário pode efetuar e visualizar vendas, consultar
produtos e acessar a ajuda na utilização do protótipo, bastando que haja um aparelho celular
com suporte a tecnologia Java e conexão com a internet.
1.3 Estrutura da Monografia
Esta monografia apresenta cinco capítulos, incluindo esta introdução:
 CAPÍTULO I – INTRODUÇÃO:
Este capítulo apresenta o crescimento de aplicações e usuários de dispositivos móveis,
apresentando os métodos de trabalho de alguns representantes e vendedores, motivando o
1
NOKIA fabricante mundial de dispositivos móveis.
6
desenvolvimento de uma aplicação (protótipo) potencialmente atrativo para estes
profissionais, levando em consideração as necessidades e o objetivo apresentado.
 CAPÍTULO II – TECNOLOGIAS E FERRAMENTAS UTILIZADAS:
São apresentadas as tecnologias e as ferramentas utilizadas no desenvolvimento do
trabalho, suas características, vantagens e evolução até as versões utilizadas.
 CAPÍTULO III – DESENVOLVIMENTO DO PROTÓTIPO:
Descreve todas as fases do projeto com os requisitos de hardware e software, o
diagrama de casos de uso detalhado, a estrutura da aplicação, as ferramentas e tecnologias
utilizadas no desenvolvimento, a implementação do banco de dados e a evolução do protótipo.
 CAPÍTULO IV – UTILIZAÇÃO DO PROTÓTIPO:
Mostra o funcionamento e funcionalidades do protótipo através das telas geradas pelo
emulador.
 CAPÍTULO V – CONCLUSÃO:
Apresenta os resultados alcançados, descrevendo suas contribuições para os
interessados do ramo de vendas e futuras implementações que podem ser desenvolvida.
7
Capitulo II
2. Tecnologias e Ferramentas utilizadas
Para o desenvolvimento de uma aplicação em J2ME é necessária uma JVM e uma IDE
de desenvolvimento. No site http://www.java.com/pt_BR/download/ está disponível a versão
atual do Java para download. Com a instalação do Java será instalada a máquina virtual, que é
necessária para a execução da aplicação.
Neste projeto foi utilizada a IDE NetBeans na versão 6.9.1. Esta ferramenta se
encontra disponível para download em http://netbeans.org/downloads/6.9.1/. Neste site há
varias opções de download desta ferramenta, para o desenvolvimento em várias linguagens. A
versão utilizada neste projeto acompanha o servidor webGlassFish, que será o responsável por
fazer a ligação da MIDlet com as páginas JSP.
Para a visualização do andamento da aplicação, é necessário que haja um emulador
instalado, lembrando que existem vários tipos de emuladores de acordo com cada fabricante
de celulares. Este projeto utiliza o WirelessToolkit 2.5.2 for CLDC, disponível em
http://www.oracle.com/technetwork/java/index-jsp-137162.html.
Na
instalação
do
WirelessToolkit, o mesmo reconhece a maquina virtual Java instalada.
O banco de dados utilizado no desenvolvimento do protótipo é o PostgreSQL na
versão 8.3, disponível em http://www.postgresql.org/download/windows site do PostgreSQL
para download.
2.1 Java
Segundo (Silveira, 2003), Java é uma linguagem de alto nível, com sintaxe similar à
do C++. Esta é uma linguagem simples, orientada a objeto, tipada (usa variáveis com tipos
específicos), independente de arquitetura (pode ser utilizada em qualquer plataforma sem
alteração do código fonte), robusta, segura, extensível, bem estruturada, distribuída,
multithreaded (multitarefas) e com garbage collection (coleta de lixo). A simplicidade da
linguagem Java deriva do fato de não possuir sobrecarga de operadores, structs, unions,
aritmética de ponteiros, herança múltipla, diretiva de pré-processamento e a memória alocada
8
dinamicamente é gerenciada pela própria linguagem, que usa algoritmos de garbage
collection para desalocar (liberar) regiões de memória que não estão mais em uso no software.
A plataforma de desenvolvimento é bastante versátil, subdivida em várias edições,
cada uma possuindo um propósito específico (Muchow, 2001):

Java SE - Projetado para funcionar em computadores desktop e estações de
trabalho;

Java EE - Com suporte embutido para Servlets, JSP, XML, esta edição é
destinada a aplicações baseadas em servidor;

Java ME - Projetado para dispositivos com pouca memória de vídeo e poder de
processamento (dispositivos móveis);

Java Card para desenvolvimento em Smart Cards, etc.
Em 1998, a Sun2 introduziu o nome "Java 2" junto com o lançamento do Java 1.2. Esta
convenção de nomenclatura se aplica a todas as edições do Java Standard Edition, Enterprise
Edition, e Micro Edition (Muchow 2001). A figura 2 apresenta as configurações de hardware
e software, necessárias para cada edição da linguagem java e onde se aplica cada uma. Em
destaque a J2ME para dispositivos móveis (celulares) de menor processamento e memória
limitada, que utilizão a KVM (kilobyte virtual machine).
Figura 1 - Arquitetura da linguagem Java.
Fonte: http://javaminas.wordpress.com
2
Sun é uma empresa da Oracle Corporation, fabricante de computadores, semicondutor e software.
9
Com a linguagem de programação Java, pode-se criar um aplicativo que funcione
tanto no Linux3 quanto no Windows4. Mas a linguagem Java não se limita apenas a esses
sistemas operacionais. É possível desenvolver aplicações para uma infinidade de plataformas,
desde que haja suporte a Java Virtual Machine ou, em português, Máquina Virtual Java.
(Alecrim, 2005)
A JVM é um mecanismo que permite executar código em Java em qualquer
plataforma. Segundo a definição da Sun, a JVM pode ser entendida como "uma máquina
imaginária implementada via software ou hardware que executa instruções vindas de
bytecodes (código em bytes). (Alecrim, 2005)
Segundo a (Oracle5, 2011) a tecnologia Java esta presente em mais de 4,5 bilhões de
dispositivos, incluindo:

Mais de 800 milhões de PCs (computadores pessoais).

2,1 bilhões de telefone celulares e outros dispositivos portáteis.

3,5 milhões de cartões inteligentes.
Além de impressoras, webcams, jogos, sistemas de operação para automóveis,
terminais lotéricos, dispositivos médicos, guichês de pagamento de estacionamento, entre
outros.
2.2 J2ME – Java 2 Micro Edition
De acordo com a Sun, Java 2 Micro Edition é uma API (Interface de Programação de
Aplicações)
que tem por objetivo desenvolver aplicativos para aparelhos com pequena
capacidade de memóriacomo micro processadores. É um padrão que provê um ambiente
flexível para aplicações que executem em dispositivos como celulares, PDAs, TVs, sistemas
de navegação de carros e outros dispositivos.
Neste projeto foi utilizado J2ME no desenvolvimento do protótipo, por esta ser
utilizada por mais de dois bilhões de aparelhos, segundo (Kozovits, 2009), ser associada a
3
Linux sistema operacional de código livre.
Windows sistema operacional multitarefa com interface gráfica.
5
Oracle Corporation é uma empresa multinacional de tecnologia e informação dos Estados Unidos.
4
10
tecnologia GSM (Global System for Mobile Communication) e por possuir uma comunidade de
desenvolvedores.
A máquina virtual J2ME foi projetada para ser utilizada em dispositivos móveis que
possuem memória limitada, display (tela) menor e menos poder de processamento. É chamada
Kilobyte Virtual Machine (KVM) numa alusão à pequena quantidade de memória exigida, que
está na ordem dos kilobytes. É a base da arquitetura, localizada sobre o sistema operacional
instalado na máquina, seguida pelas configurações que suporta os Perfis.
Segundo (Corbera, 2003), esta plataforma consiste de máquinas virtuais (KVM) e
APIs de configuração (CDC e CLDC) atuando em conjunto com profiles (perfis). O perfil
utilizado neste projeto foi o MIDP, que tem como base o CLDC. Ele fornece funcionalidades
para o desenvolvimento de aplicativos para uma grande variedade de celulares e é atualmente
a tecnologia mais usada para desenvolvimento de aplicativos para esses dispositivos. Os
aplicativos desenvolvidos com base no MIDP são chamados de MIDlets. A MIDlet é uma
classe Java com estrutura já pronta. O ciclo de vida de uma MIDlet é composto de três
métodos, sendo eles: startApp (método que irá inicializar a aplicação), pauseApp (método que
irá pausar a aplicação) e destroyApp (método que irá finalizar a aplicação). A Figura 2
apresenta a arquitetura da J2ME disposta em camada:
Figura 2 - Arquitetura J2ME
Fonte: www.inforede.net/Technical/Layer_1/Wireless_Mobile/Tutorial%20J2ME%20Parte%201.pdf
11
Segundo (Pereira, 2008), o CDC e o CLDC são configurações de dispositivos
conectáveis. O CDC é uma configuração de hardware que têm memória considerável e maior
poder de processamento, tais aparelhos têm uma conexão permanente e de maior largura de
banda (medida de frequência em Hertz de um sistema ou sinal). Neste grupo podemos incluir
os computadores de bordo, televisores e tabletes PCs. Diferentemente do CDC, o CLDC
abrange aparelhos em que a conexão é interrompida e de pequena largura de banda. Esta
configuração foi projetada visando suprir as necessidades de dispositivos com pouca
memória, limitações gráficas e baixo poder de processamento. Os aparelhos com esta
característica são os PDA’s, aparelhos celulares e os smartcards (cartões inteligentes).
Lembrando que as APIs de configuração atuam integradas com a JVM instalada nos
dispositivos.
No padrão Mobile Information Device Profile ou Perfil de Dispositivo de Informação
Móvel, o objetivo é definir bibliotecas e APIs especificamente para dispositivos com
comunicação wireless, como telefones celulares. O principal objetivo da especificação MIDP
são as APIs de componentes, interface com o usuário e tratamento de eventos, comunicação
via rede e armazenamento persistente.
Segundo (Schmitt, 2004), uma aplicação MIDP contém no mínimo uma classe MIDlet,
podendo em alguns casos conter mais de um MIDlet, sendo chamada de MIDlet Suite. A
aplicação MIDP, para ser instalada no dispositivo, necessita ser empacotada (compactada),
criando um Java Archive (JAR) que obrigatoriamente contém um arquivo de manifesto (este
arquivo descreve configurações básicas para que o MIDlet execute, tais como nome do
MDIlet, localização do jar e outras), englobando as informações sobre o MIDlet contido no
pacote JAR. Este arquivo contendo as informações sobre a aplicação, configuração e perfil
utilizado na mesma, é denominado Java Application Descriptor.
A MIDP que estamos utilizando é a 2.1, que reforça a MIDP 2.0 e o dispositivo móvel
deve possuir as seguintes características: (Pereira, 2008)

256 kb de memória não volátil

18 kb de memória volátil

8 kb de memória não volátil (dados persistentes do programador)

Display 96×54, 1-bit, 1:1

Rede: two-way (duas vias) e wireless
12

Exigência de suporte à conexão segura

Biblioteca de multimídia

Formulário de entrada de dados aprimorada

Sensível melhoria na API de suporte a Games

Conceito de aplicações confiáveis (Trusted) e não confiáveis (Untrusted)
O Sun Java Wireless ToolKité uma caixa de ferramentas "state-of-the-art” (de última
geração) para o desenvolvimento de aplicações sem fio que são baseados em Connected
J2ME LimitedDevice Configuration e Mobile Information Device Profile, e projetado para
rodar em telefones celulares, assistentes digitais pessoais mainstream (corrente principal), e
outros pequenos dispositivos móveis. O toolkit inclui os ambientes de emulação, de
otimização de desempenho e recursos de ajuste, documentação e exemplos que os
desenvolvedores precisam para serem eficientes e bem sucedidos.
2.3 PostgreSQL
Segundo (Biazus, 2009) o PostgreSQL é um SGBD, objeto-relacional de código
aberto, desenvolvido pelo Departamento de Ciência da Computação da Universidade da
Califórnia em Berkley há mais de 15 anos, derivado do projeto POSTGRES. É extremamente
robusto e confiável, além de ser extremamente flexível e rico em recursos. O PostgreSQL é
considerado objeto-relacional por implementar, além das características de um SGBD
relacional, possui características de orientação a objetos, como herança e tipos personalizados.
OPOSTGRES foi originalmente patrocinado pelo DARPA (Agência de Pesquisa de
Projeto Avançado de Defesa), ARO (Army Research Office), NSF (National Sciencia
Foundation) e ESL Inc (Electromagnetic Systems Laboratory Incoporated). A implementação
do projeto POSTGRES iniciou-se em 1986. A primeira versão lançada para o público externo
foi em 1989. Devido a uma crítica feita ao seu sistema de regras, o POSTGRES teve essa parte
re-implementada e lançada em uma segunda versão em 1990. Em 1991 foi lançada a versão 3,
com melhorias no executor de consultas e algumas partes do código foram re-escritas. As
versões subsequentes, até o Postgres95, foram focadas em confiabilidade e portabilidade. O
POSTGRES foi utilizado para diversos sistemas de pesquisa e de produção, uma aplicação de
análise financeira, e diversos sistemas de informações geográficas. O código do POSTGRES é
13
comercializado pela Illustra Information Technologies (posteriormente incorporada à
Informix, que agora pertence à IBM).(Biazus, 2009)
Em 1996 o nome Postgres95 tornou-se inadequado, o projeto foi rebatizado
"PostgreSQL", para enfatizar a relação do POSTGRES original com a linguagem SQL. A
numeração da versão voltou a seguir o padrão anterior ao Postgres95 (considerada a 5.0), e a
primeira versão do PostgreSQL foi a 6.0. Enquanto a ênfase do Postgres95 foi a correção de
falhas e otimização do código, o desenvolvimento das primeiras versões do PostgreSQL foi à
melhoria de recursos e implementação de novos recursos, sempre seguindo os padrões de
SQL anteriormente estabelecidos. (Biazus, 2009)
A equipe do projeto cresceu e se espalhou pelo mundo. O PostgreSQLGlobal
Development Group tem membros nos Estados Unidos, Canadá, Japão, Rússia, vários países
da Europa e alguns outros. Esse grupo é formado essencialmente por empresas especializadas
em PostgreSQL, empresas usuárias do sistema, além dos pesquisadores acadêmicos e
programadores independentes. Além da programação, essa comunidade é responsável pela
documentação, tradução, criação de ferramentas de modelagem e gerenciamento, e elaboração
de extensões e acessórios. Pela riqueza de recursos e conformidade com os padrões, ele é um
SGBD muito adequado para o estudo universitário do modelo relacional, além de ser uma
ótima opção para empresas implementarem soluções de alta confiabilidade sem altos custos
de licenciamento. É um programa distribuído sob a licença BSD, o que torna o seu código
fonte disponível e o seu uso livre para aplicações comerciais ou não. O PostgreSQL foi
implementado em diversos ambientes de produção no mundo, entre eles, o banco de dados
que armazena os registros de domínio .org, mantido pela empresa Afilias.
Abaixo são mostrados alguns recursos utilizado na versão mais recente do
PostgreSQL: (Biazus, 2009)

Sub-consultas;

Controle de concorrência multi-versão;

Integridade Referencial;

Funções armazenadas (Stored Procedures), que podem ser escritas em várias
linguagens de programação (PL/PgSQL, Perl, Python, Ruby, e outras);

Gatilhos (Triggers);

Tipos definidos pelo usuário;
14

Esquemas;

Conexões SSL;

Áreas de armazenamento;

Pontos de salvamento;

Commit (conjunto de mudanças permanentes) em duas fases

Arquivamento e restauração do banco a partir de logs de transação

Diversas ferramentas de replicação

Extensões para dados geoespaciais, indexação de textos, xml e várias outras.
2.4 NetBeans
No desenvolvimento deste protótipo foi utilizada a ferramenta NetBeans, pois a
ferramenta similar Eclipse necessita de uma perspectiva de desenvolvimento para aplicações
J2ME, isto é, o conjunto de bibliotecas e classes de apoio ao desenvolvimento móvel, e o
NetBeans já possui esta perspectiva de desenvolvimento.
A seguir são apresentadas alguns dos principais recursos disponíveis para o
desenvolvimento de aplicações móveis Java no NetBeans: (Developer, 2011)

Editor visual de fluxo da aplicação (Visual Flow Designer);

Editor visual de formulários (Visual Form Designer);

Analisador de códigos;

Um sistema de compilação de projeto modular;

Suporte ao porte de aplicações;

Configuração das conexões sem fio (disponível no pacote All);

Suporte ao desenvolvimento de gráficos vetoriais escaláveis para Java ME através da
API JSR 226;

Várias opções de distribuição de aplicações, incluindo a distribuição para dispositivos
Nokia usando o softwareNokia PC Suite;

Suporte a projetos;

Ferramentas de desenvolvimento integrado;

Suporte a execução de testes usando J2MEUnit;

Suporte integrado a ofuscação e otimização de código;
15
O NetBeans Java foi desenvolvido pela empresa Sun Microsystems, é gratuito e de
código aberto para desenvolvedores de software. Esta IDE (Ambiente Integrado para
Desenvolvimento) é executada em diversas plataformas como: Windows, Linux, Solaris e
MacOS, de fácil instalação e usabilidade. É uma ferramenta que auxilia programadores a
escrever, compilar, debugar e instalar aplicações.
Segundo a (Redação Oficina da Net, 2008), oNetBeans foi iniciado em 1996 por dois
estudantes tchecos na Universidade de Charles, em Praga, quando a linguagem de programação
Java ainda não era utilizada como atualmente. Primeiramente o nome do projeto era Xelfi, em
referência ao Delphi, pois, a pretensão deste projeto era possuir funcionalidades semelhantes aos
IDEs, então populares do Delphi que eram mais atrativas por serem ferramentas visuais e mais
fáceis de usarem, porém com o objetivo de ser totalmente desenvolvido em Java.
Em 1999 o projeto já havia evoluído para uma IDE proprietária, com o nome de
NetBeansDeveloperX2. Nessa época a empresa Sun Microsystems havia desistido de sua IDE Java
Workshop e procurando por novas iniciativas adquiriu o projeto NetBeansDeveloperX2
incorporando-o a sua linha de softwares (programa).
Por alguns meses a Sun mudou o nome do projeto para Forte for Java e o manteve por um
bom tempo como software proprietário, porém, em junho de 2000 a Sun disponibilizou o código
fonte do IDE NetBeans tornando-o uma plataforma OpenSource (código aberto). Desde então a
comunidade de desenvolvedores que utilizam e contribuem com o projeto não parou de crescer,
tornando-se uma das IDEs mais populares atualmente.
2.5 GlassFish
Segundo (Souza, 2011), para executarem, aplicações corporativas devem ser
implantadas em servidores de aplicação Java. Um destes servidores é o GlassFish,
desenvolvido pela Oracle e disponibilizado em versões gratuita e comercial. O GlassFish
nasceu em 2005 como um projeto da Sun a partir do servidor de aplicações comercial já
existente na empresa, o Sun Java ApplicationServer 9. Sua versão 1.0 foi desenvolvida para
servir de implementação de referência do padrão Java EE 5, uma implementação completa da
especificação construída para demonstrar como ela funciona.
16
O GlassFish 3.0 foi desenvolvido como implementação de referência do padrão Java
EE 6 e, agora em sua versão 3.1, conta com novas funcionalidades que adicionam
características, como a alta disponibilidade, escalabilidade e tolerância a falhas, que são
essenciais para um servidor de produção que hospede aplicações de médio e grande porte.
(Souza, 2011)
Como o objetivo desta primeira versão era prover uma implementação de referência
para o Java EE 5, ainda faltavam funcionalidades que tornassem o GlassFish um servidor para
uso em produção, como alta disponibilidade e tolerância a falhas. Assim, este foi o objetivo
da versão 2.0 do GlassFish, que adicionou capacidade de clustering (técnica para fazer
agrupamentos automáticos de dados segundo seu grau de semelhança) ao servidor.
(Souza, 2011) Com a disponibilização, em dezembro de 2009, da nova versão do
padrão para aplicações corporativas, o Java EE 6, o GlassFish foi utilizado como
implementação de referência: o GlassFish 3.0 provia uma implementação completa da
especificação Java EE 6, porém sem funcionalidades que o tornassem um servidor de
produção escalável e disponível. No final de fevereiro de 2011, as anteriores funcionalidades
de clustering além de uma série de outras melhorias foram adicionadas ao servidor com o
lançamento do GlassFish 3.1. Algumas destas melhorias são citadas a seguir, conforme o
(GlassFish, 2011):

Evocação dinâmica de serviços, somente os serviços utilizados são iniciados;

Melhorias de extensibilidade, tanto no servidor quanto na interface de administração;

Ciclos de inicialização e implantação (deploy) 29% mais rápidos que na versão 3.0.1.
2.6 GSM - GlobalSystemforMobileCommunication
Segundo (Guenzburger, 2011), trata-se de um padrão aberto para telefonia celular
digital presente na Europa desde 1992 e, nas Américas, desde 1983. No mercado mundial, o
GSM é utilizado por 71% dos indivíduos que possuem celulares e, no Brasil, também é a
tecnologia mais utilizada.
17
Dados da ANATEL (Agência Nacional de Telecomunicação) indicam que o Brasil
terminou em maio/2011 com 215 milhões de celulares, sendo que, 86,47% destes celulares
operavam com tecnologia GSM. (Anatel, 2011)
Uma das principais vantagens desta tecnologia é a proteção contra clonagem (cópia).
Com esta tecnologia, o cliente fica protegido e não tem seu celular clonado. A clonagem não
existe na tecnologia GSM por funcionar em redes 100% digitais criptografadas –
diferentemente de outros sistemas, que alternam entre analógico e digital, conforme a
localização do celular. (Guenzburger, 2011)
A tecnologia GSM tem como diferencial o chip, que contém todas as informações do
usuário. Os chips são processadores potentes e, ao mesmo tempo pequenos, com 2,6 cm por
1,5 cm.
18
Capitulo III
3. Desenvolvimento do Protótipo
3.1 Requisitos de hardware
O MIDP foi construído para funcionar em cima do CLDC. Ele fornece
funcionalidades para o desenvolvimento de aplicativos para uma grande variedade de
celulares e é atualmente a tecnologia mais usada para desenvolvimento de aplicativos para
esses dispositivos. Os aplicativos desenvolvidos com base no MIDP são chamados de
MIDlets.
Para tanto, um MIDP deve possuir as seguintes características mínimas de hardware
(além daquelas que são requeridas pelo CLDC): (Devmedia, 2011)
-
Display:

Tamanho da tela: 96x54;

Profundidade: 1 bit;

Formato do pixel (proporção de aspecto): 1:1;
-
Input:

Teclado de telefone (one-handed keypad) e/ou

Teclado QWERTY(two-handed keyboard) e/ou

Tela sensível ao toque (touch screen)
-
-
Memória:

128Kbytes para os componentes MIDP;

8Kbytes para dados das aplicações;

32Kbytes para o JAVA runtime;
Rede:
19

2-vias, wireless, possivelmente intermitente, e com faixa limitada
3.2 Requisitos de software
Os MIDPs possuem uma grande variedade de softwares de sistema. Por essa razão, o
MIDP estabeleceu requisitos mínimos de sistema: (Devmedia, 2011)
-
Um kernel para controlar o hardware, que possua uma entidade escalonável
para rodar a Máquina Virtual Java;
-
Um mecanismo para ler e escrever na memória para suportar as APIs;
-
Acesso de leitura e escrita à rede sem fio;
3.3 Diagrama de Casos de Uso
3.3.1 Descrição dos casos de uso

Efetuar venda:
Ator do caso de uso: Usuário
Pré-condições: O aparelho deve estar conectado com o banco de dados.
Fluxo Principal:
20
1 – O usuário acessa a aplicação e o protótipo lista todos os produtos na tela do
celular.
2 – O usuário localiza o produto a ser vendido e acessa o formulário de vendas.
3 – O usuário preenche os campos do formulário e finaliza a venda com
sucesso.
Fluxos Alternativos:
3.1 – A venda não é efetuada caso haja algum campo em branco.

Visualizar venda:
Ator do caso de uso: Usuário.
Pré-condições: O protótipo com a base de dados e deve haver no mínimo uma
venda efetuada com sucesso.
Fluxo Principal:
1 – O usuário acessa a opção visualizar vendas no meu do aparelho.
2 – O usuário visualiza todas as vendas listadas pelo protótipo.
3 – O usuário fecha a tela de visualização.

Acessar ajuda:
Ator do caso de uso: Usuário.
Pré-condições: O programa deve estar em execução no aparelho celular.
Fluxo Principal:
1 – O usuário acessa a opção de ajuda no menu do protótipo.
2 – O protótipo mostra um texto de ajuda para o usuário.
3 – O usuário fecha a tela de ajuda.
3.4 Estrutura de comunicação entre a MIDlet e o banco de dados
A MIDlet é a classe Java executada em dispositivos móveis como celulares. Para que
haja uma comunicação entre a MIDlet e o servidor de banco de dados é necessário uma
aplicação Web direcionada (por meio de código) para acessar o banco, assim esta busca e
21
armazena os dados cadastrados no banco. Desta forma, a MIDlet através de um método
(ações), busca as informações armazenada na aplicação Web e mostra na tela do celular.
Para a MIDlet armazenar os dados no banco, esta se comunica com a aplicação Web,
que direciona as informações recebidas para o banco de dados. A Figura 4 apresenta a
estrutura de comunicação entre a MIDlet e o banco de dados.
Figura 3 – Estrutura de comunicação entre a MIDlet e o Banco de Dados
Neste protótipo foi utilizado um emulador da Sun que executa a MIDlet, fazendo a
comunicação com o banco de dados através de páginas JSPs desenvolvidas em JEE. O
processo de desenvolvimento do protótipo foi testado por meio de localhost (localização do
sistema que está sendo usado).
3.6 Modelo Entidade Relacionamento – Banco de dados
O Modelo Entidade Relacionamento (MER) apresenta a ligação das tabelas no
PostgreSQL. Este tem como finalidade descrever a estrutura lógica de um banco de dados. O
MER relaciona as entidades e os seus respectivos atributos. Uma entidade serve tanto para
depósito quanto para recuperação de dados. Toda entidade possui atributos, ou seja,
características que informam sobre a entidade. Relacionamento é a interação entre os objetos
que indicam a dinâmica dos negócios. Os relacionamentos são identificados por verbos
porque representam as ações que uma entidade exerce sobre outra.
22
Todas as tabelas criadas não aceitam valores nulos, ou seja, precisam receber dados de
acordo com o tipo aceito pelo campo. Estas características de cada campo são definidas no
momento da criação da tabela.
Para toda venda efetuada com sucesso, será disparada uma trigger que atualiza o
campo quantidade_produto da tabela produto, pois é necessário que a quantidade vendida seja
subtraída na quantidade do produto que existe em estoque. Assim a lista de produtos exibida
na tela do protótipo vai está sempre atualizada.
3.7 Detalhes do desenvolvimento do Projeto
A ferramenta de desenvolvimento utilizada foi o NetBeans. Após a seleção de criação
de um novo projeto, o programa mostra as opções para a escolha do tipo do projeto. A
categoria utilizada foi a Java ME. Na tela seguinte o programador pode decidir sobre qual será
o nome da aplicação e onde ela será armazenada no computador.
23
Após definido o nome e o local, o próximo passo é selecionar a plataforma do
emulador, que é o WirelessToolkit 2.5.2 for CLDC (já instalado anteriormente), com as
configurações de dispositivos CLDC-1.1 e o Perfil de dispositivos MIDP-2.1.
Definido o tipo do projeto, o nome e as suas configurações, foi criado o projeto, este
necessita de uma MIDlet (estoque.java) que é uma classe Java. Esta MIDlet necessita
importar
uma
biblioteca
específica
para
aplicações
em
J2ME
(import
javax.microedition.midlet.MIDlet). Também foram criadas duas classes Java comuns que
implementam a interface Runnable com todos os seus métodos. O Runnable é uma interface
que tem alguns métodos que precisam estar inicializados.
Na classe MIDlet são inseridos os elementos gráficos que irão aparecer no celular,
para isso é preciso importar a biblioteca (import javax.microedition.lcdui.*), onde o pacote
lcdui* irá disponibilizar todos os seus métodos, e através dele podemos criar e manipular
componentes e formulários.
Após a importação das bibliotecas, já é possível iniciar a criação dos objetos, com
destaque para o objeto display que vai herdar todas as características da classe Display
(private Display display;). Essa classe é responsável pela manipulação da tela do celular,
identificando suas características, como: a cor da tela, se ela é colorida ou não, a capacidade
de memória, entre outras características. Sendo assim este objeto irá adequar a aplicação às
características do celular.
Também são utilizados outros objetos, como: Form, Command, TextField, os
componentes List e Vector.
A tela inicial recebe uma lista onde são exibidos todos os produtos cadastrados no
banco de dados, e também exibe o menu de comandos (command). Para que o command
execute a ação desejada, é preciso implementar o CommandListener com seu método
commandAction. Este método fornece todas as opções para os comandos, de forma que a cada
comando solicitado ele execute sua ação. A Figura 4 apresenta o código do método
commandAction.
24
Figura 4 –Trecho da programação utilizando o commandAction
Quando o comando command cm_sair é selecionado executa o método de fechar a
aplicação, assim como o command cm_voltar retorna a aplicação para a tela inicial,
independente do formulário que esteja sendo utilizado no momento. O command cm_vender
executa a ação de chamar o formulário de Vendas.
Como não existe banco de dados para dispositivos móveis, é necessária a criação de
outro projeto destinado a aplicações Web. A criação deste novo projeto é semelhante à criação
do projeto móvel. A diferença está no tipo de projeto, que é o JEE para aplicativos
corporativos, em seguida são definidos o nome (EstoqueWEB) o local a ser salvo (de
preferência o mesmo local onde foi armazenado o projeto móvel). Após isso, o programador
define qual será o servidor Web a ser utilizado e as suas configurações. O servidor utilizado é
o GlassFish, configurado de acordo com a versão JEE5, com o módulo de aplicativo Web,
nomeado de EstoqueWEB-war. Neste módulo se encontram as páginas JSP, as bibliotecas e
os pacotes de código fonte, entre outros componentes.
O projeto Web é o responsável pela comunicação entre o celular e o banco de dados.
Para isso foi criado três páginas JSPs que fazem a função de comunicação entre a aplicação e
o banco.
25
A página JSP responsável pela pesquisa dos produtos cadastrados na tabela (produto) é
a lista_produto.jsp Para efetuar esta comunicação, a página precisa importar a biblioteca
<%@page import = "java.sql.*" %>. Esta biblioteca importa os itens necessários para a
conexão com o banco de dados. Após importar as bibliotecas são criadas algumas variáveis
que serão responsáveis para fazer a conexão e busca dos dados no banco de dados, entre essas
variáveis estão a variável driver, que armazena o driver de conexão com o banco, a variável
conexão que armazena as configurações da conexão com o banco, a variável url que recebe as
informações via localhost, a variável usuário que vai receber o nome do usuário do banco, a
variável senha que recebe a senha do banco, a variável Connection responsável pela conexão,
o Statement responsável por indicar o caminho e o ResultSet que armazena os dados no banco.
A Figura 5 apresenta o código de criação das variáveis responsáveis pela busca dos dados no
banco.
Figura 5 – Variáveis de busca e busca com o banco de dados.
Logo em seguida, a classe forName irá carregar o driver (org.postgresql.Driver), que é
o responsável por fazer a conexão com o banco. O DriverManager irá gerenciar a conexão
com a url, com usuário e senha, e o ResultSet está armazenando os dados do banco que estão
sendo mostrados pelo Statement que indica o caminho, neste caso o caminho é toda a tabela
de produtos. A Figura 6 apresenta o código da tentativa de conexão da página
lista_produtos.jsp com a tabela produto do banco de dados Em seguida o código que mostra a
tentativa de conexão com a tabela produto:
26
Figura 6 – Código de conexão entre o banco e a página JSP
Para que sejam exibidos na tela do celular todos os produtos de modo organizado (em
ordem), foi criada uma estrutura de repetição que irá fazer a verificação de todos os registros.
Assim, a cada campo que ele for buscando, estará exibindo na página os campos separados
pelo caractere (,) e após a busca de um produto do banco, o caracter (#) é inserido, estes
caracteres são necessários para uma organização dos campos na tela do celular. A Figura 7
apresenta o código utilizado para exibir na página os campos separados pelos caracteres
citados.
Figura7 – Código de separação dos campos
Desse modo a página lista_produto.jsp está conectando com o banco de dados,
buscando e armazenando nele os campos da tabela produto e estes separados pelos caracteres ,
e #.
Após o ciclo de repetições, é necessário mostrar na página um caracter diferente para
auxiliar na manipulação dos dados (out.println("^");).
27
Com a página JSP conectando com o banco e buscando os valores dos campos
cadastrados na tabela produtos, é preciso conectar a aplicação do celular com a página JSP.
Utilizamos a classe Java acessoWEB.java. Esta classe importa as bibliotecas import java.io.*
que possibilitam manipular dados de entrada e saída, a biblioteca
import java.util.Vector
necessária
a
para
trazer
os
dados
através
de
vetores
e
biblioteca
import
javax.microedition.io.HttpConnection, que possibilita acesso a uma conexão no servidor.
Após importar as bibliotecas, é criado o objeto HttpConnection para conexão, uma variável
que vai receber a url da página lista_produto.jsp, o objeto InputStream que será objeto
responsável por buscar os dados e exibir na tela. Como essa classe vai trabalhar diretamente
com a MIDlet estoque.java, criamos um objeto especifico para a classe estoque e uma variável
que recebe a url. Quando a classe acessoWEB.java for executada ela recebe o parâmetro
vindo da MIDlet estoque.java. A Figura 8 apresenta o código de criação dos objetos contidos
na classe acessoWEB.java responsáveis pela conexão e busca dos dados armazenados na
página JSP e o método de ligação entre a MIDlet e a classe, para que estas estejam
trabalhando ligadas diretamente.
Figura 8 – Código de ligação da MIDlet estoque.java com a classe acessoWEB.java
Assim o objeto estoque (obj_estoque) receberá o obj_estoque referente à MIDlet
estoque.java (estoque obj_estoque) passado por parâmetro. Está ligação é necessária para a
manipulação dos dados através da MIDlet.
Para buscar os dados da página JSP, para que eles sejam manipulados e mostrados na
MIDlet, foram criados alguns métodos, um método (public void lerVenda()), Este método fica
responsável por ler a página lista_produto.jsp através da variável url. Também foi criado o
método (public void inicia_thread()), este fica responsável por iniciar todo o processo do
28
método de execução (public void run()). A Figura 9 apresenta o código do método
responsável por ler a página JSP e o método responsável pela inicialização:
Figura 9 – Métodos public void lerVenda() e public void inicia_thread()
Depois de realizado todo esse processo os valores da tabela produto já estarão sendo
exibidos na tela do celular, mas eles não estão ordenados. Por isso, foi preciso manipular
esses dados (código, descrição, valor e quantidade) para que eles fiquem organizados de
maneira que o usuário entenda. Assim foi preciso criar uma variável do tipo vetor que
receberá todos os dados e mostrará na tela. O objeto conexão (obj_conexao_http) buscará a
página JSP com todos os caracteres, após isso uma condição faz a verificação do objeto, se o
objeto conseguir buscar a página, o inputStream (obj_inputstream) vai receber a conexão e
armazenar todos os dados byte a byte da página JSP. Em seguida foi criada uma variável
(caracter_lido) que irá receber a leitura do obj_inptstream e um ciclo de repetições,
verificando byte a byte os valores da variável caracter_lido até encontrar o caracter final (^) e
uma variável (stringbuffer) do tipo StringBuffer que é responsável por juntar esses bytes
separados pelos caracteres específicos para forma um valor. Neste primeiro ciclo, é criado um
vetor (dados = new String[4];) com 4 posições do tipo string, este será responsável por fechar
4 ciclos seguinte. Os três primeiros ciclos são responsáveis por verificar byte a byte do
caracter_lido até encontrar o caracter especifico (,) para seu fechamento. O quarto ciclo
verifica todos os caracteres até encontrar o caracter especifico (#), que indica que um
elemento da tabela produto foi separado dos demais. Antes que cada ciclo termine os
caracteres são reunidos pelo StringBuffer formando um elemento e este é adicionado no vetor
de dados (vetor_dados.addElement(dados);). Após o término dos quatro ciclos, volta para o
primeiro ciclo e a ordenação dos elementos da tabela produto vão sendo separados. Toda essa
29
verificação é feita até que o ciclo principal identifique o último caracter (^). A Figura 9
apresenta o código do ciclo principal que vai ler todos os dados byte a byte até encontrar o
caracter (^) e o primeiro ciclo (referente ao código do produto) dos quatros ciclos
responsáveis para separar os valores dos campos da tabela produto.
Figura 10 – Trecho da programação utilizando uma Estrutura de repetição
Feito todos os ciclos até ter encontrado o último caracter (^), voltamos a MIDlet
estoque.java e criamos outro método (recebedados_produto(Vector vetor_dados)), que está
recebendo por parâmetros o vetor_dados da classe acessoWEB.java onde contem todos os
elementos dos ciclos feito anteriormente. Este método esta inserindo o vetor_dados na MIDlet
e buscando seu tamanho para uma sequência de repetições até o tamanho total do vetor.
Dentro dessa repetição, foi criado um vetor do tipo String (dados), que estará recebendo de
um a um os elementos do vetor_dados e a tela inicial que é uma lista, estará mostrando cada
elemento inserido no do vetor dados de acordo com a sua posição e separados por um caracter
especifico (-). Mas para a visualização dos produtos com seus campos na tela, é preciso que
na classe acessoWEB.java, seja referenciado o método recebedados_produto, logo após o
fechamento do ciclo principal, passando como parâmetro o vetor_dados. Assim serão
mostrados na tela do celular todos os valores dos campos da tabela produto ordenados em
código_produto, descrição_produto, valor_produto e quantidade_produto. A Figura 10
apresenta o código de criação do método recebedados_produto na MIDlet.
30
Figura 11 – Método recebedados_produto
Desta forma está concluída a primeira parte, onde todos os produtos com os seus campos
estão sendo mostrados na tela inicial do protótipo.
Para efetuar uma venda, quando o usuário acessar o comando cm_vender, este executa
a ação de direcionar para o formulário de venda. A Figura 11 apresenta o código de inserção
dos objetos TextField e Command, que são utilizado no formulário de vendas.
Figura 12 – Objetos do formulário de Vendas
Após o preenchimento dos campos, é necessário que estes sejam gravados na tabela
vendas. Para esse comando (cm_gravar) gravar os valores no banco, foi preciso criar um
objeto na MIDlet do tipo acessoWEB, referente a classe acessoWEB.java. Este objeto faz com
que a MIDlet trabalhe diretamente com a classe, assim ele recebe os valores inseridos em cada
TextField do formulário de venda e através desse método a classe acessoWEB recebe por
parâmetros os valores enviado pelos obj_acessoWEB. A Figura 12 apresenta o código do
commandcm_gravar, que envia os valores recebido pelo TextField para classe
acessoWEB.java.
31
Figura 13 – Command cm_gravar.
Na classe acessoWEB.java tem um método inserirVenda, responsável por enviar os
dados recebido por parâmetros dos TextField da MIDlet para a página vender_produto.jsp,
através da variável url que envia esses dados para a tabela de vendas do banco de dados. A
Figura 13 apresenta o código do método inserirVenda.
Figura 14 – Método inserirVenda
A página vender_produto.jsp, possui a ligação com o banco do mesmo modo feito
com a lista_produtos.jsp, porem a variável Stringsql responsável pelo código SQL, vai
receber o comando INSERT passando como parâmetro os valores recebidos por parâmetro no
método inserirVenda, mas para isso precisa a MIDlet se comunicar com a página. Esta
comunicação foi feita do mesmo modo em que a lista_produto.jsp e com a MIDlet, utilizando
o obj_conexao_http e obj_inputstream. A Figura 14 apresenta o código da variável sql
inserindo por parâmetro os valores recebido da MIDlet.
32
Figura 15 – Código SQL de inserção.
Com a venda sendo concluída e gravada no banco, foi criado um comando
(cm_visualizar) na MIDlet para listar as vendas efetuadas, este comando segue o mesmo
raciocínio feito para lista os produtos na tela inicial do protótipo, porem ele utiliza uma classe
chamada acesso.java no lugar da classe acessoWEB.java.
Foi criado um comando (cm_ajuda) para auxiliar o usuário no manuseio da aplicação.
Este comando quando solicitado abre uma tela que ajuda o usuário a manusear a aplicação de
maneira correta.
33
Capítulo IV
4. Utilização do Protótipo
Este capítulo apresenta como utilizar o protótipo, através das telas geradas pelo
emulador (Wireless ToolKit) da Sun, onde ao ser iniciado ele acessa a tabela de produtos,
através da ligação com o banco de dados e lista todos os produtos separados pelos seus
respectivos campos: código, descrição, valor e quantidade. A Figura 15 apresenta a tela inicial
do protótipo com os produtos da tabela produto listado.
Figura 16 – Tela de lista dos produtos.
34
A Figura 16 apresenta a tela do protótipo com as funcionalidades do menu, onde
mostra a opção de vender produtos listados na tela, visualizar as vendas realizadas e a opção
de ajuda.
Figura 17 – Funcionalidades do menu.
A Figura 17 apresenta a tela com o formulário de vendas, esta tela abre quando a
opção Vender Produto é escolhido, assim pode ser realizada uma venda preenchendo os
campos, código do produto referente ao produto visualizado na tela inicial, a quantidade de
produto a ser vendido, o código do vendedor que efetuará a venda, o CNPJ do cliente que vai
receber o produto e a data da venda para um controle das vendas efetuadas.
Figura 18 – Formulário de Vendas.
35
Após a venda efetuada, a tela inicial do protótipo é exibida com a quantidade de
produto vendido atualizando a quantidade de produto da tabela produto. A Figura 18
apresenta a tela com a quantidade de produto atualizado no estoque.
Figura 19 – Tela de lista de produtos atualizada após a venda.
A figura 19 apresenta a tela de visualização das vendas efetuadas, esta tela é mostrada
quando a opção Visualizar Vendas é acessada no menu do protótipo. Assim todas as vendas
registradas na tabela vendas do banco são listadas na tela.
Figura 20 – Tela de visualização das vendas efetuadas.
36
A Figura 20 apresenta o formulário de ajuda, este é exibido quando a opção Ajuda no
menu é acessada. Esta opção mostra um texto ensinando como utilizar o protótipo, assim o
usuário em caso de dúvida pode está recorrendo a este formulário para uma solução.
Figura 21 – Tela de ajuda.
37
Capítulo V
5. Conclusão
Os serviços de telefonia móvel vêm crescendo e se expandindo em todos os setores da
sociedade, com o surgimento cada vez maior de novos serviços para estes dispositivos.
A ideia desse projeto foi desenvolver uma aplicação, que facilite o acesso a
informações importantes contidas em uma base de dados, através de um aparelho celular,
tendo em vista que não há a necessidade de recorrer frequentemente à empresa para verificar
informações de determinado produto.
O desenvolvimento deste projeto proporcionou o ganho de novos conhecimentos, além
de aprimorar os já adquiridos no que diz respeito à plataforma J2ME, ferramenta de
desenvolvimento NetBeans e o aprimoramento em banco de dados, servidor de aplicação e
orientação a objetos.
Entre as dificuldades encontradas, destaca-se o pouco conhecimento na linguagem
J2ME. Já conhecíamos a linguagem Java nas edições J2SE e J2EE, mas não possuíamos
conhecimento algum em J2ME. Foi necessário muito empenho e tempo gasto com o estudo,
análise e testes desta linguagem.
Para finalizar, dentro do que foi exposto acima, verificamos que muitos profissionais
do setor de vendas necessitam efetuar vendas com base em dados de produtos catalogados em
várias pastas de trabalho. A partir disso, sugerimos a implantação deste protótipo, para maior
qualidade no atendimento ao cliente e apoio ao profissional de vendas.
5.1 Trabalhos Futuros
Após a conclusão do desenvolvimento deste projeto, foi verificado que o protótipo pode
ser aprimorado com a implementação de novas funcionalidades, como o armazenamento
temporário de dados em casos de perda de sinal. Neste caso os dados poderiam ser
armazenados temporariamente e após restabelecer o sinal, estes acessariam o banco e
registrariam a venda e a funcionalidade de efetuar a venda de mais de um produto em uma
mesma venda.
38
REFERÊNCIA BIBLIOGRÁFICA
ALECRIM, E. Máquina Virtual Java (Java Virtual Machine). 2005. Disponível
em:<http://www.infowester.com/jvm.php>. Acesso em 12 de março. 2011.
ANATEL. Brasil fecha maio com mais de 215 milhões de acessos móveis. 2011. Disponível
em:
<http://www.anatel.gov.br/Portal/exibirPortalNoticias.do?acao=carregaNoticia&codigo=2291
7>. Acesso em 18 de junho. 2011.
BOGO, K. C. A História da Internet: Como Tudo Começou... 2000. Disponível em:
<http://kplus.cosmo.com.br/materia.asp?co=11&rv=Vivencia >. Acesso em: 09 de março.
2011.
CORBERA, R. P. O que é J2ME. 2003. Disponível em:
<http://www.inforede.net/Technical/Layer_1/Wireless_Mobile/Tutorial%20J2ME%20Parte%
201.pdf>. Acesso em 03 de março. 2011.
COUTINHO, N., & BIAZUS, D. Introdução e Histórico. 2009. Disponível em:
<http://wiki.postgresql.org/wiki/Introdu%C3%A7%C3%A3o_e_Hist%C3%B3rico>. Acesso
em 28 de abril. 2011.
Developer, N. Desenvolvendo aplicações em Java ME usando NetBeans IDE.2011.
Disponível
em:<http://www.developer.nokia.com/Community/Wiki/Desenvolvendo_aplica%C3%A7%C
3%B5es_em_Java_ME_usando_Netbeans_IDE>. Acesso em 07 de julho. 2011.
EQUIPE DEVMEDIA. Iniciando o desenvolvimento de aplicações J2ME – Parte 1. 2011.
Disponível em:<http://www.devmedia.com.br/post-8351-Iniciando-o-desenvolvimento-deaplicacoes-J2ME-Parte-01.html>. Acesso em 12 de março. 2011.
GARTNER. Gartner diz que vendas mundiais de smartphones cresceram 72% em 2010.
2011. Disponível em: <http://targethd.net/2011/02/17/gartner-diz-que-vendas-mundiais-desmartphones-cresceram-72-em-2010/>. Acesso em 28 de junho. 2011.
39
GUENZBURGER, R. GSM, a melhor tecnologia sem clonagem. 2011. Disponível
em:<http://info.abril.com.br/infosmb/edicoes/001/arquivos/5625_1.shtml>.Acesso em 28
maio. 2011.
KNUDSEN, J., & LI, S. Beginning J2ME. New York: Spring-Verlag New York Inc.2005.
Kozovits, L. E. Um panorama do Mercado de Jogos e Mobile Entertainment. Rio de Janeiro.
RJ, Brasil. 2009.
MUCHOW, J. W. Core J2ME Technology & MIDP.Palo Alto: Prentice Hall. 2001.
ORACLE. Saiba mais sobre a tecnologia Java. 2011.Disponível em: <http://www.java.com
/pt_BR/about/>. Acesso em 24 de maio. 2011.
PEREIRA, P. B. Entendendo arquitetura JME: CDC, CLDC, MIDP 1.0, MIDP 2.0 2 MIDP
2.1. 2008. Disponível em: <http://devmobile.blog.br/2008/07/24/componentes-da-arquiteturajme/>. Acesso em 12 de março. 2011.
REDAÇÃO OFICINA DA NET. O que é NetBeans. 2011.Disponível em:
<http://www.oficinadanet.com.br/artigo/1061/o_que_e_o_netbeans>.Acesso em 11 de março.
2011.
SCHMITT JR., A. J. 2004. Protótipo de front end de controle de acesso usando J2ME.
Trabalho de Conclusão de Curso (Bacharelado em Ciência da Computação) . Blumenau:
Centro de Ciências Exatas e Naturais, Universidade Regional de Blumenau.
SILVEIRA, I. F. Linguagem Java.2011.Disponível em:
<http://www.infowester.com/lingjava.php>. Acesso em 12 de março. 2011.
SOUZA, V. E. Novidades no GrassFish 3.1.2011.Disponível em:
<http://www.devmedia.com.br/post-21124-Novidades-do-GlassFish-3-1.html>. Acesso em 29
de maio. 2011.
WIKIDOT.COM. GlassFish. 2009.Disponível em:
<http://pesquompile.wikidot.com/glassfish>.Acesso em 12 de março.2011.
40
ANEXO
41
Código de programação.
MIDlet – estoque.java
import java.util.Vector;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class estoque extends MIDlet implements CommandListener {
private Vector vetor_dados, vetor_dados2;
private Display display;
private acessoWEB obj_acessoWEB;
private acesso obj_acesso;
private List lista, lista2;
private Form frm_vender, frm_ajuda;
private Command cm_sair, cm_vender, cm_gravar, cm_voltar, cm_ajuda, cm_visualizar;
private TextField tf_ajuda, tf_codigo_produto1, tf_data, tf_quantidade_produto_venda,
tf_codigo_vendedor, tf_cnpj;
public void startApp() {
display = Display.getDisplay(this);
lista = new List("Lista de Produtos", List.EXCLUSIVE);
lista2 = new List("Lista de Vendas", List.EXCLUSIVE);
obj_acessoWEB = new acessoWEB(this);
obj_acesso = new acesso(this);
frm_vender = new Form("Venda : ");
frm_ajuda = new Form("Ajuda : ");
cm_sair = new Command("Sair", Command.EXIT, 1);
cm_vender = new Command("Vender Produto", Command.SCREEN, 1);
cm_visualizar = new Command("Visualizar Vendas", Command.SCREEN, 2);
cm_ajuda = new Command("Ajuda", Command.SCREEN, 3);
cm_voltar = new Command("Voltar", Command.EXIT, 1);
cm_gravar = new Command("Gravar", Command.EXIT, 1);
tf_codigo_produto1 = new TextField("Código do Produto :", "", 5, TextField.NUMERIC);
tf_quantidade_produto_venda = new TextField("Quantidade de Produto :", "", 6,
TextField.NUMERIC);
tf_codigo_vendedor
=
new
TextField("Código
Vendedor
:",
"",
5,
TextField.NUMERIC);
tf_cnpj = new TextField("CNPJ do Cliente ( 00000000/0000-00 ) :", "", 16,
TextField.ANY);
tf_data = new TextField("Data da Venda ( yyyy / mm / dd ) :", "", 10, TextField.ANY);
tf_ajuda = new TextField("Ajuda !","Bem Vindo ao Estoque móvel. Aqui você aprende
como "
+ "utilizar essa ferramenta. Na tela inicial ao se entrar no programa, aparecerá "
+ "listado todos os produtos com: código, descrição, valor e quantidade. Estes "
+ "estarão separados por um hífen. Na parte inferior do lado direito, aparecerá "
+ "um menu, onde terá as opções: vender produto, visualizar venda e ajuda. Na "
+ "opção Vender Produto, aparecerá uma nova tela, onde você terá que colocar o "
+ "código do produto que será vendido, código este que foi listado na tela inicial,"
+ " a quantidade de produto que o cliente deseja comprar, o CNPJ do cliente "
+ "respeitando o modelo mostrado e a data que também tem que ser respeitado o
modelo."
42
+ " Após ter preenchido tudo corretamente vá à opção gravar e a venda será
gravada. "
+ "Para ter certeza que a venda foi efetuada, feche a aplicação e entre novamente, "
+ "agora acesse a opção Visualizar Venda e aparecerão todas as vendas realizadas, "
+ "listadas na ordem da data, se aparecer a sua venda, isso significa que esta foi "
+ "realizada com sucesso, senão faça o processo de efetuar venda novamente. Agora
"
+ "você já sabe como utilizar está ferramenta. Boa sorte." , 1121, TextField.ANY);
lista.addCommand(cm_sair);
lista.addCommand(cm_vender);
lista.addCommand(cm_visualizar);
lista.addCommand(cm_ajuda);
lista2.addCommand(cm_voltar);
frm_vender.append(tf_codigo_produto1);
frm_vender.append(tf_quantidade_produto_venda);
frm_vender.append(tf_codigo_vendedor);
frm_vender.append(tf_cnpj);
frm_vender.append(tf_data);
frm_vender.addCommand(cm_voltar);
frm_vender.addCommand(cm_gravar);
frm_ajuda.addCommand(cm_voltar);
frm_ajuda.append(tf_ajuda);
lista.setCommandListener(this);
lista2.setCommandListener(this);
frm_vender.setCommandListener(this);
frm_ajuda.setCommandListener(this);
display.setCurrent(lista);
obj_acessoWEB.lerVenda();
obj_acesso.inicia_thread();
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
}
public void commandAction(Command c, Displayable d)
{
if (c == cm_sair)
{
destroyApp(true);
notifyDestroyed();
}
else if (c == cm_voltar)
{
display.setCurrent(lista);
}
else if (c == cm_vender)
{
display.setCurrent(frm_vender);
43
}
else if (c == cm_gravar)//os parametros nao sao todos string a quntidade é inteira e o
valor real
{
obj_acessoWEB.inserirVenda(tf_codigo_produto1.getString(),
tf_quantidade_produto_venda.getString(),
tf_codigo_vendedor.getString(),
tf_cnpj.getString(), tf_data.getString());
display.setCurrent(lista);
}
else if ( c == cm_visualizar)
{
display.setCurrent(lista2);
}
else if (c == cm_ajuda)
{
display.setCurrent(frm_ajuda);
}
}
public void recebedados_produto(Vector vetor_dados)
{
this.vetor_dados = vetor_dados;
int tamanho = vetor_dados.size();
for (int i=0; i < tamanho; i++)
{
String [] dados = (String[]) vetor_dados.elementAt(i);
lista.append(dados[0] + " - " + dados[1] + " - " + dados[2] + " - "+ dados[3], null);
}
}
public void recebedados_vendas(Vector vetor_dados2)
{
this.vetor_dados2 = vetor_dados2;
int tamanho2 = vetor_dados2.size();
for (int j=0; j < tamanho2; j++)
{
String [] dados2 = (String[]) vetor_dados2.elementAt(j);
lista2.append(dados2[0] + " - " + dados2[1] + " - " + dados2[2] + " - "+ dados2[3]+ " "+ dados2[4] + " - " + dados2[5], null);
}
}
}
MIDlet – acessoWEB.java
import javax.microedition.midlet.*;
import java.io.*;
import java.util.Vector;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
public class acessoWEB implements Runnable
{
private Vector vetor_dados;
44
private HttpConnection obj_conexao_http;
private String url;
private InputStream obj_inputstream;
private estoque obj_estoque;
private Thread thread;
private String acao="lerVenda";
public acessoWEB(estoque obj_estoque)
{
this.obj_estoque = obj_estoque;
}
public void lerVenda()
{
acao="lerVenda";
url = "http://localhost:8080/EstoqueWEB-war/lista_produto.jsp";
inicia_thread();
}
public void inserirVenda(String codigo_produto, String quantidade_produto_venda, String
codigo_vendedor, String cnpj, String data)
{
acao="insereVenda";
url="http://localhost:8080/EstoqueWEBwar/vender_produto.jsp?codigo_produto="+codigo_produto+"&quantidade="+quantidade_pr
oduto_venda+"&codigo_vendedor="+codigo_vendedor+"&cnpj="+cnpj+"&data="+data;
inicia_thread();
}
public void run() {
try
{
if (acao.equals("lerVenda"))
{
vetor_dados = new Vector();//irá armazenar os dados para jogar na tela do celular
String [] dados;
obj_conexao_http = (HttpConnection) Connector.open(url);
if (obj_conexao_http.getResponseCode() == HttpConnection.HTTP_OK)
{
obj_inputstream = obj_conexao_http.openInputStream();
int i = 1, caracter_lido = obj_inputstream.read();
StringBuffer stringbuffer = new StringBuffer();
while(caracter_lido != '^')
{
dados = new String[4];
while(caracter_lido != ',')
{
stringbuffer.append((char) caracter_lido);
caracter_lido = obj_inputstream.read();
}
System.out.println("Código do Produto = " + stringbuffer.toString().trim());
dados[0] = stringbuffer.toString().trim();
stringbuffer.delete(0, stringbuffer.length());
caracter_lido = obj_inputstream.read();
45
while(caracter_lido != ',')
{
stringbuffer.append((char) caracter_lido);
caracter_lido = obj_inputstream.read();
}
System.out.println("Descrição do Produto = " + stringbuffer.toString().trim());
dados[1] = stringbuffer.toString().trim();
stringbuffer.delete(0, stringbuffer.length());
caracter_lido = obj_inputstream.read();
while(caracter_lido != ',')
{
stringbuffer.append((char) caracter_lido);
caracter_lido = obj_inputstream.read();
}
System.out.println("Valor do Produto = " + stringbuffer.toString().trim());
dados[2] = stringbuffer.toString().trim();
stringbuffer.delete(0, stringbuffer.length());
caracter_lido = obj_inputstream.read();
while(caracter_lido != '#')
{
stringbuffer.append((char) caracter_lido);
caracter_lido = obj_inputstream.read();
}
System.out.println("Quantidade
do
Produto
=
"
+
stringbuffer.toString().trim());
dados[3] = stringbuffer.toString().trim();
stringbuffer.delete(0, stringbuffer.length());
caracter_lido = obj_inputstream.read();
vetor_dados.addElement(dados);
}
obj_estoque.recebedados_produto(vetor_dados);
}
}
else if (acao.equals("insereVenda"))
{
obj_conexao_http = (HttpConnection) Connector.open(url);
if (obj_conexao_http.getResponseCode() == HttpConnection.HTTP_OK)
{
obj_inputstream = obj_conexao_http.openInputStream();
}
}
}
catch(IOException io)
{
System.out.println(" Erro de IOException = " +io);
}
catch(SecurityException se)
{
System.out.println(" Erro de SecurityException = " +se);
}
46
}
public void inicia_thread()
{
thread = new Thread(this);
thread.start();
}
MIDlet – acesso.java
import javax.microedition.midlet.*;
import java.io.*;
import java.util.Vector;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
public class acesso implements Runnable
{
private Vector vetor_dados2;
private HttpConnection obj_conexao_http2;
private String url;
private InputStream obj_inputstream2;
private estoque obj_estoque2;
private Thread thread2;
private String acao2="verVenda";
public acesso(estoque obj_estoque2)
{
this.obj_estoque2 = obj_estoque2;
}
public void run() {
url = "http://localhost:8080/EstoqueWEB-war/visualizar_vendas.jsp";
try
{
vetor_dados2 = new Vector();
String [] dados2 = new String[6];
obj_conexao_http2 = (HttpConnection) Connector.open(url);
if (obj_conexao_http2.getResponseCode() == HttpConnection.HTTP_OK)
{
obj_inputstream2 = obj_conexao_http2.openInputStream();
int caracter_lido2 = obj_inputstream2.read();
StringBuffer stringbuffer2 = new StringBuffer();
while(caracter_lido2 != '^')
{
dados2 = new String[6];
//lendo o código de venda
while(caracter_lido2 != ',')
{
stringbuffer2.append((char) caracter_lido2);
caracter_lido2 = obj_inputstream2.read();
}
dados2[0] = stringbuffer2.toString().trim();
stringbuffer2.delete(0, stringbuffer2.length());
47
caracter_lido2 = obj_inputstream2.read();
while(caracter_lido2 != ',')
{
stringbuffer2.append((char) caracter_lido2);
caracter_lido2 = obj_inputstream2.read();
}
dados2[1] = stringbuffer2.toString().trim();
stringbuffer2.delete(0, stringbuffer2.length());
caracter_lido2 = obj_inputstream2.read();
while(caracter_lido2 != ',')
{
stringbuffer2.append((char) caracter_lido2);
caracter_lido2 = obj_inputstream2.read();
}
dados2[2] = stringbuffer2.toString().trim();
stringbuffer2.delete(0, stringbuffer2.length());
caracter_lido2 = obj_inputstream2.read();
while(caracter_lido2 != ',')
{
stringbuffer2.append((char) caracter_lido2);
caracter_lido2 = obj_inputstream2.read();
}
dados2[3] = stringbuffer2.toString().trim();
stringbuffer2.delete(0, stringbuffer2.length());
caracter_lido2 = obj_inputstream2.read();
while(caracter_lido2 != ',')
{
stringbuffer2.append((char) caracter_lido2);
caracter_lido2 = obj_inputstream2.read();
}
dados2[4] = stringbuffer2.toString().trim();
stringbuffer2.delete(0, stringbuffer2.length());
caracter_lido2 = obj_inputstream2.read();
while(caracter_lido2 != '#')
{
stringbuffer2.append((char) caracter_lido2);
caracter_lido2 = obj_inputstream2.read();
}
dados2[5] = stringbuffer2.toString().trim();
stringbuffer2.delete(0, stringbuffer2.length());
caracter_lido2 = obj_inputstream2.read();
vetor_dados2.addElement(dados2);
}
obj_estoque2.recebedados_vendas(vetor_dados2);
}
}
catch(IOException io)
{
System.out.println(" Erro de IOException = " +io);
}
48
catch(SecurityException se)
{
System.out.println(" Erro de SecurityException = " +se);
}
}
public void inicia_thread()
{
thread2 = new Thread(this);
thread2.start();
}
}
Página JSP – vender_produto.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import = "java.sql.*" %><%-- importa tudo do java que é necessário para se
conectar com o banco de dados--%>
<%
String driver = "org.postgresql.Driver";
String url = "jdbc:postgresql://localhost:5432/postgres";
String usuario = "postgres";
String senha = "123";
Connection conexao;
Statement statement;
ResultSet resultset;
try //tentar fazer a conxão
{
Class.forName(driver);
conexao = DriverManager.getConnection(url, usuario, senha);
System.out.println( "Conexão estabelecida com sucesso ");
statement = conexao.createStatement();
String sql = "insert into vendas(codigo_produto, quantidade_produto_venda,
codigo_vendedor, cnpj, data) values " +
"('"+request.getParameter("codigo_produto")+"','"+request.getParameter("quantidade")+"','"+
request.getParameter("codigo_vendedor")+"','"+request.getParameter("cnpj")+"','"+request.ge
tParameter("data")+"')";
int cadastrou = statement.executeUpdate(sql);
if (cadastrou == 1)
out.println("Cadastro feito com sucesso");
else
out.println("Não conseguiu cadastrar");
}
catch(Exception erro)
{
out.print("erro : "+erro);
}
%>
Página JSP – lista_produto.jsp
<%@page import="javax.swing.JOptionPane"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
49
<%@page import = "java.sql.*" %><%-- importa tudo do java que é necessario para se
conectar com o banco de dados--%>
<%
String driver = "org.postgresql.Driver";
String url = "jdbc:postgresql://localhost:5432/postgres";
String usuario = "postgres";
String senha = "123";
Connection conexao;
Statement statement;
ResultSet resultset;
try //tentar fazer a conxão
{
Class.forName(driver);
conexao = DriverManager.getConnection(url, usuario, senha);
System.out.println( "Conexão estabelecida com sucesso ");
statement = conexao.createStatement();
resultset = statement.executeQuery("select * from produto order by
produto.codigo_produto");
while (resultset.next())
{
out.print(resultset.getInt(1));
out.print(","+resultset.getString(2));
out.print(","+resultset.getFloat(3));
out.print(","+resultset.getInt(4)+"#");
}
}
catch(ClassNotFoundException Driver)
{
out.print("driver não localizado : "+Driver);
}
catch(SQLException Fonte)
{
out.print("deu erro na conexão " + "com a fonte de dados: "+ Fonte);
}
out.println("^");
%>
Página JSP – visualizar_vendas.jsp
<%@page import="javax.swing.JOptionPane"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import = "java.sql.*" %><%-- importa tudo do java que é necessário para se
conectar com o banco de dados--%>
<%
String driver = "org.postgresql.Driver";
String url = "jdbc:postgresql://localhost:5432/postgres";
String usuario = "postgres";
String senha = "123";
Connection conexao;
Statement statement;
ResultSet resultset;
50
try //tentar fazer a conxão
{
Class.forName(driver);
conexao = DriverManager.getConnection(url, usuario, senha);
System.out.println( "Conexão estabelecida com sucesso ");
statement = conexao.createStatement();
resultset = statement.executeQuery("select * from vendas order by vendas.data");
while (resultset.next())
{
out.print(resultset.getInt(1));
out.print(","+resultset.getInt(2));
out.print(","+resultset.getInt(3));
out.print(","+resultset.getInt(4));
out.print(","+resultset.getString(5));
out.print(","+resultset.getString(6)+"#");
}
}
catch(ClassNotFoundException Driver)
{
out.print("driver não localizado : "+Driver);
}
catch(SQLException Fonte)
{
out.print("deu erro na conexão " + "com a fonte de dados: "+ Fonte);
}
out.println("^");
%>
Download