JDBC
Java Database Connectivity
http://www.javasoft.com/products/jdbc/index.html
http://www.javasoft.com/products/jdk/1.2/
docs/guide/jdbc/getstart/introTOC.doc.html
O que é JDBC
• Especificação para uso de base de dados em
aplicações e applets JAVA;
• API para uso de drivers JDBC;
• API para criação de drivers JDBC;
• Baseado na X/Open SQL Call Level
Interface (CLI)
• Compatível com ANSI SQL-92.
Fabricantes comprometidos com
a JDBC
•
•
•
•
•
•
•
Inprise
IBM
Informix
Intersolv
Oracle
SAS Institute
SCO
•
•
•
•
Sybase
Symantec
Visigenic
etc...
Arquitetura JDBC
– Uma interface independente de SGDB
• “ambiente de acesso a SGDBs SQL genérico”
• Interface uniforme para diferentes fontes de dados.
– O programador escreve uma interface para
banco de dados, podendo acessar várias fontes
diferentes sem mudança de código.
Arquitetura JDBC
Ponte JDBC / ODBC
JDBC API
• Registrando drivers JDBC:
– Modo 1:
Class.forName(“jdbc.odbc.JdbcOdbcDriver”);
Class.forName(“j102.sql.IDSDriver”);
Obs: NÃO funciona no IE, devendo ser mudado para:
Class.forName(“jdbc.odbc.JdbcOdbcDriver”).newInstance();
Class.forName(“j102.sql.IDSDriver”).newInstance();
– Modo 2:
Driver drv = new j102.sql.IDSDriver();
JDBC API
• Declarando uma URL
– Sintaxe:
• jdbc:<subprotocol>:<subname>
– subprotocol:indica o tipo de SGBD desejado
» odbc, oracle, etc
– subname: especificação adicional dependente do protocolo
(Ex: nome do datasource, usuário, senha, porta, etc...)
– Sintaxe do subname (recomendada pela Javasoft)
– jdbc:<subprotocol>://hostname:port/subsubname
– Ex: jdbc:mysql://ppgia.pucpr.br:3333/databasename
JDBC API
• Estabelecendo uma Conexão
– Modo 1
Connection con = DriverManager.getConnection(String url, String User, String
Pass);
Connection con = DriverManager.getConnection(String url);
Connection con = DriverManager.getConnection(String url, Properties info);
– Modo 2
Connection con = drv.getConnection(String url, String User, String Pass);
Connection con = drv.getConnection(String url);
Connection con = drv.getConnection(String url, Properties info);
JDBC API
• Executando instruções
– Statement
• Executa uma instrução SQL fixa
– PreparedStatement
• Executa uma instrução SQL com parâmetros
– callableStatement
• Executa uma Stored Procedure
JDBC API
• Obtendo um objeto para execução
– Statement:
• Statement stmt = con.createStatement();
– PreparedStatement
• PreparedStatement pstmt =
con.prepareStatement(“INSERT INTO teste
(name,id) VALUES (?, ?)”);
– callableStatement
• callableStatement cstmt = con.prepareCall(“{call
test_sp(?,?)}”;
Statement
• public int executeUpdate(String)
– Executa um comando SQL que não produz uma
tabela de resultados. Retorna o número de
linhas afetadas, ou 0 se nenhum resultado for
produzido
• stmt.executeUpdate(“CREATE TABLE test (name
CHAR(25), id INT”);
• stmt.executeUpdate(“INSERT INTO test VALUES
(´Brian´,’1)”);
Statement
• public ResultSet executeQuery(String)
– executa uma instrução SQL que produz como
resultado uma tabela
• stmt.executeQuery(“SELECT * FROM test”);
PreparedStatement
• public void setString(int,String);
– Atribui o valor String ao parâmetro
especificado
• pstmt.setString(1,”John”);
• public void setInt(int par,int val);
– Atribui o valor val ao parâmetro par
• pstmt.setInt(2,1);
• public int executeUpdate();
• public int executeQuery();
Retornando Dados
• ResultSet
– Implementa uma tabela que contém o resultado
obtido de uma consulta
• ResultSetMetaData
– Implementa uma tabela que contém os metadados de um objeto ResultSet
• DatabaseMetaData
– Implementa uma tabela que contém os metadados de uma conexão
Forma Geral
Connection con = DriverManager.getConnection (
"jdbc:odbc:wombat", "login", "password");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM
Table1");
while (rs.next( )) {
int x = rs.getInt("a");
String s = rs.getString("b");
float f = rs.getFloat("c");
}
ResultSet - Exemplo
a
-------12345
83472
83492
b
-------------Cupertino
Redmond
Boston
c
-------4.5
3.56
0.02
SELECT a, b, c FROM Table1
ResultSet - Exemplo (cont.)
java.sql.Statement stmt = con.createStatement();
ResultSet r = stmt.executeQuery("SELECT a, b, c FROM
Table1");
while (r.next())
{
// print the values for the current row.
int i = r.getInt("a");
String s = r.getString("b");
float f = r.getFloat("c");
System.out.println("ROW = " + i + " " + s + " " + f);
}
Download

JDBC – conceitos básicos