Escolar Documentos
Profissional Documentos
Cultura Documentos
rmauro@puzzlenet.com.br
Java + BD + WEB
1 - Introduo Linguagem Java 2 - Tipos de Aplicao 3 - Execuo de Servlets / JSP 4 - JDBC 5 - SQLJ 6 - Agenda de Telefones 7 - Mais Informaes
Fortran
Delphi
javac
( Compilador )
JAVA para Windows 95 JAVA para AS/400 JAVA para XPTO System
Java - Linguagem OO
Classe X Objeto Herana Polimorfismo Encapsulamento Pacotes Pessoa
um ( uma )
Aluno
Funcionrio
abstract class Pessoa { private String nome; private int idade; public Pessoa( String nome, int idade ) { this.nome = nome; this.idade = idade; } public void mostraDados() { System.out.println( nome ); System.out.println( idade ); } }
Professor
abstract class Pessoa { } class Aluno extends Pessoa { } class Funcionario extends Pessoa { } class Professor extends Funcionario{ }
Aplicao Java
Executa em um "Container"
Aplicao Java
Executa em um "Container"
Aplicaes Console so aplicaes Java, que so executadas a partir da JVM instalada no S.O e seu resultado mostrado na tela do shell, sem recursos GUI. Ex.: Processamento Batch, Servidores TCP/IP.
Aplicao Java
Executa em um "Container"
Aplicaes Janela so aplicaes Java, que so executadas a partir da JVM instalada no S.O e seu resultado mostrado em uma Janela Grfica do sistema operacional utilizado. Concorrente de aplicaes VB, Delphi, etc...
Aplicao Java
Executa em um "Container"
Applets so Aplicaes em Java que rodam dentro de um navegador WEB compatvel com Java ( P. ex. I.Explorer ou Netscape ). Neste caso o Browser o Container.
Aplicao Java
Executa em um "Container"
Servlets so Aplicaes em Java que rodam dentro de um servidor WEB compatvel com Java. Servlets geram pginas HTML dinmicamente. O cliente pode, mas no precisa dar suporte Java.
Aplicao Java
Executa em um "Container"
JSP - Java Server Pages. Assim como Servlets programas JSP so aplicaes em Java que geram contedo para WEB dinmicamente.
Servidor WEB Contedo Dinmico Contedo Dinmico Executor JSP Contedo Dinmico Script JSP Requisio Repassa a Requisio
JSP No EXISTE !
z
Todo Script em JSP convertido automaticamente em uma Servlet. O que de fato executado uma Servlet!
No
Servlet Criado
Sim
Sim
Criar Servlet
Servlet Desatualizado
No
Executar Servlet
Fim
XPTO ??
Aplicao Java
Executa em um "Container"
Stored Procedures
10
Servlet X JSP
JSP Tecnologias Associadas ASP Cold Fusion PHP Servlets
CGI
Filosofia
Fcil de Fazer alteraes no HTML. Manuteno Armadilha! Colocar regras de negcio misturado gerao do HTML.
O Tomcat integrvel com o IIS da Microsoft e com o Apache. A configurao do Tomcat feita em Arquivos .XML O Tomcat gera automaticamente um arquivo .conf para integrar com o Apache. A integrao com IIS feita atravs da instalao de uma .dll redirecionadora e atravs da edio do Registro do Windows.
11
Estrutura Jakarta-Tomcat
.class
.jar
Aplicao Java
Executa em um "Container"
Stored Procedures so programas executados tendo como container o SGBD. Cada banco de dados possui a sua prpria linguagem e API ( por exemplo PL/SQL, TSQL, etc ). Alguns bancos permitem escrever SP em Java.
12
Exemplo SP ( Oracle )
1 ) Escrever o programa Java para ser uma Stored Procedure respeitando a API do Oracle. 2 ) Compilar normalmente o programa ( gerando um .class ). 3 ) Carregar o .class para o Oracle com o comando LoadJava, fornecida junto com o banco. 4 ) Registrar a(s) funo(es) criadas. 5 ) Executar consultas chamando-se as funes registradas.
JDBC
Sigla para Java Database Connectivity. Padro de acesso a banco de dados relacionais atravs de Java.
Atravs de uma API comum os diversos banco de dados so acessados. Os fabricantes de Driver JDBC que so responsveis pela implementao dos aspectos especficos de um determinado banco. Permite um alto grau de portabilidade: A portabilidade no total devido no padronizao dos SQLs.
Qualquer tipo de aplicao Java pode acessar o banco de dados atravs de JDBC. JDBC bastante semelhante, em termos de arquitetura com o ODBC, com a diferena que escrito 100% em Java.
13
JDBC
Servlets JSP Applets
JDBC
DRIVER X DRIVER Y DRIVER DG
DBMS X
DBMS Y
DATA GATEWAY
Arquitetura 3 camadas
Servidor de Aplicao
Compatvel com JAVA
J D B C
Banco de Dados
14
Aplicao JDBC Driver Manager ODBC Driver Manager Driver ODBC ( .dll )
Banco de Dados
Banco de Dados
15
REDE
Midware
Banco de Dados
REDE
Banco de Dados
16
Abrindo Conexo
import java. java.sql.*; sql.*; public class TesteConexao { public static void main( main(String args[]) args[]) { Connection c = null; null; try { String driver = "..."; String url = "..."; String usuario = "..."; String senha = "..."; Class. Class. forName( forName( driver ); c = DriverManager. DriverManager.getConnection( getConnection( url, url, usuario, usuario, senha ); System. System.out. out.println( println( "Conexo Aberta com sucesso!" ); // Executar Aqui as Consultas... c.close c.close(); (); } catch( catch( ClassNotFoundException ex ) { System. System.out. out.println( println( "Driver no Encontrado..." ); } catch( catch( SQLException ex ) { System. System.out. out.println( println( "Problemas com o banco..." ); System. System.out. out.println( println( ex. ex.getMessage() getMessage() ); System. System.out. out.println( println( ex. ex.getErrorCode() getErrorCode() ); } } }
17
Exemplo Access
import java. java.sql.*; sql.*; public class TesteConexao { public static void main( main(String args[]) args[]) { Connection c = null; null; try { String driver = "sun.jdbc.odbc.JdbcOdbcDriver"; String url = "jdbc:odbc:scott"; String usuario = ""; String senha = ""; Class. Class. forName( forName( driver ); c = DriverManager. DriverManager.getConnection( getConnection( url, url, usuario, usuario, senha ); System. System.out. out.println( println( "Conexo Aberta com sucesso!" ); // Executar Aqui as Consultas... c.close c.close(); (); } catch( catch( ClassNotFoundException ex ) { System. System.out. out.println( println( "Driver no Encontrado..." ); } catch( catch( SQLException ex ) { System. System.out. out.println( println( "Problemas com o banco..." ); System. System.out. out.println( println( ex. ex.getMessage() getMessage() ); System. System.out. out.println( println( ex. ex.getErrorCode() getErrorCode() ); } } }
Exemplo Oracle
import java. java.sql.*; sql.*; public class TesteConexao { public static void main( main(String args[]) args[]) { Connection c = null; null; try { String driver = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@localhost:1521:orcl"; String usuario = "pim"; String senha = "pim"; Class. Class. forName( forName( driver ); c = DriverManager. DriverManager.getConnection( getConnection( url, url, usuario, usuario, senha ); System. System.out. out.println( println( "Conexo Aberta com sucesso!" ); // Executar Aqui as Consultas... c.close c.close(); (); } catch( catch( ClassNotFoundException ex ) { System. System.out. out.println( println( "Driver no Encontrado..." ); } catch( catch( SQLException ex ) { System. System.out. out.println( println( "Problemas com o banco..." ); System. System.out. out.println( println( ex. ex.getMessage() getMessage() ); System. System.out. out.println( println( ex. ex.getErrorCode() getErrorCode() ); } } }
18
Exemplo MySQL
import java. java.sql.*; sql.*; public class TesteConexao { public static void main( main(String args[]) args[]) { Connection c = null; null; try { String driver = "org.gjt.mm.mysql.Driver"; String url = "jdbc:mysql://127.0.0.1/ecomm"; String usuario = ""; String senha = ""; Class. Class. forName( forName( driver ); c = DriverManager. DriverManager.getConnection( getConnection( url, url, usuario, usuario, senha ); System. System.out. out.println( println( "Conexo Aberta com sucesso!" ); // Executar Aqui as Consultas... c.close c.close(); (); } catch( catch( ClassNotFoundException ex ) { System. System.out. out.println( println( "Driver no Encontrado..." ); } catch( catch( SQLException ex ) { System. System.out. out.println( println( "Problemas com o banco..." ); System. System.out. out.println( println( ex. ex.getMessage() getMessage() ); System. System.out. out.println( println( ex. ex.getErrorCode() getErrorCode() ); } } }
Exemplo Select 1
Class.forName( driver ); c = DriverManager.getConnection( url, usuario, senha ); String sql = "SELECT cod_produto, dsc_produto FROM produto"; Statement stm = c.createStatement(); ResultSet rs = stm.executeQuery( sql ); while( rs.next() ) { System.out.println( "Codigo......: + rs.getInt( "cod_produto" ) ); System.out.println( "Descricao...: " + rs.getString( "dsc_produto" ) ); } rs.close(); stm.close(); c.close();
1) Obter Conexo 2) Criar Statement a partir da conexo 3) Executar Consulta 4) Percorrer Cursor ( ResultSet ) 5) Pega os campos desejados com get<TIPO> ( <NOME CAMPO> )
19
Exemplo Select 2
Class.forName( driver ); c = DriverManager.getConnection( url, usuario, senha ); String sql = "SELECT cod_produto, dsc_produto FROM produto" + " WHERE cod_produto = ?"; PreparedStatement stm = c.prepareStatement( sql ); int codigo = Integer.parseInt( args[0] ); stm.setInt( 1, codigo ); ResultSet rs = stm.executeQuery(); while( rs.next() ) { System.out.println( "Codigo......: " + rs.getInt( "cod_produto" ) ); System.out.println( "Descricao...: " + rs.getString( "dsc_produto" ) ); } rs.close(); stm.close(); c.close();
SQL com parmetros ( ? ) Antes de executar, deve-se definir o valor dos parmetros
Consulta ao Metadados
Dado um SQL qualquer, podemos em tempo de execuo descobrir:
quantas colunas a consulta resultou, o nome de cada coluna, o tipo de cada coluna, dentre outras informaes
Dado um ResultSet ( cursor ) podemos chamar o mtodo rs.getMetaData(), que retorna um objeto da classe ResultSetMetadata. Este objeto tem os seguintes mtodos:
getColumnCount() -- Quantas colunas getColumnName( int pos ) -- Nome da coluna pos getCoumnTypeName( int pos ) -- Tipo da coluna pos
20
Exemplo - Metadados
String sql = "SELECT cod_produto, dsc_produto FROM produto"; Statement stm = c.createStatement(); ResultSet rs = stm.executeQuery(sql); ResultSetMetaData rsmd = rs.getMetaData(); System.out.println( "Numero de Colunas: " + rsmd.getColumnCount() ); while( rs.next() ) { for( int i = 1; i <= rsmd.getColumnCount(); i++ ) { System.out.print( rsmd.getColumnName(i) ); System.out.print( "(" ); System.out.print( rsmd.getColumnTypeName(i) ); System.out.print( ")" ); System.out.print( "=" ); System.out.println( rs.getString(i) ); } } rs.close(); stm.close();
ISQL
21
Consulta Atualizao
String sql = " UPDATE produto SET PRECO = ? " + " WHERE cod_produto = ?"; PreparedStatement stm = c.prepareStatement( sql ); int preco = Integer.parseInt( args[0] ); int codigo = Integer.parseInt( args[1] ); stm.setInt( 1, codigo ); stm.setInt( 2, preco ); int quant = stm.executeUpdate(); System.out.println( "Registros Atualizados: " + quant ); stm.close();
SQLJ
Utilizao de SQL como se fosse parte da linguagem Um pr-compilador transforma o fonte .sqlj em .java O programa Java Gerado usa JDBC para acessar o banco.
Class.forName( driver ); DefaultContext.setDefaultContext(new DefaultContext( url, usuario, senha )); int codigo = Integer.parseInt( args[0] ); int preco = Integer.parseInt( args[0] ); #sql { update produto set preco = :preco where codigo = :codigo }
22
23