JDBC - iscte

Propaganda
Programação em Rede
JDBC
1
Linguagens de Programação
JDBC – Acesso a Bases de Dados
JDBC - Java Database Connectivity
• Necessidades : ligar aplicações Java e Applets a DBMS
• Drivers que suportam SQL – um driver JDBC/DBMS deve suportar pelo menos
o ANSI SQL92
• JDBC é constituído por interfaces Java que permitem ao programador :
• estabelecer uma ligação com uma base de dados particular ;
• executar instruções SQL ;
•processar os resultados.
• Os interfaces mais importantes :
• java.sql.DriverManager – gere o carregamento de um driver e suporta o
estabelecimento de ligações a uma base de dados
• java.sql.Connection – representa a ligação a uma base de dados particular
• java.sql.Statement – representa um contentor para uma instrução SQL
dada uma determinada ligação
• java.sql.ResultSet – representa o contentor dos resultados de um tipo
particular de Statement (query)
• O interface java.sql.Statement interface tem dois sub-tipos importantes :
• java.sql.PreparedStatement – para executar uma instrução SQL précompilada
• java.sql.CallableStatement – para invocar uma “stored procedure”
2
registada na base de dados
Linguagens de Programação
JDBC – Acesso a Bases de Dados
JDK 1.1 -> JDBC 1.0
JDK 1.2 -> JDBC 2.0
Drivers :
JDBC-ODBC Bridge
JDBC 2.0
-> jConnect 5.2 (driver p/ BD Sybase)
3
Linguagens de Programação
JDBC – Acesso a Bases de Dados
DriverManager
• Gere os drivers JDBC.
• Carrega as classes de driver.
• Um programa pode carregar explicitamente um driver JDBC a qualquer momento
Class.forName("my.sql.Driver");
Connection
1)
Carregar o driver
Exemplos :
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// Class.forName cria uma instância do driver e regista-o no DriverManager
ou :
SybDriver sybDriver = null;
Class c = Class.forName("com.sybase.jdbc2.jdbc.SybDriver");
sybDriver = (SybDriver) c.newInstance();
DriverManager.registerDriver((Driver) sybDriver);
4
Linguagens de Programação
JDBC – Acesso a Bases de Dados
•2)
Criar uma connection
connection – liga o driver ao DBMS
Exemplo :
String dbUrl = "jdbc:odbc:Fred";
Connection conn = DriverManager.getConnection (dbUrl, "dba", "sql");
ou :
String dbUrl = "jdbc:sybase:Tds:localhost:2638";
Properties props = new Properties();
props.put("user", "dba");
props.put("password", "sql");
Connection conn = DriverManager.getConnection (dbUrl, props);
( JDBC URL tem o formato - jdbc:subprotocol:subname, tal como
jdbc:sybase:Tds:144.14.2.1:2001 )
Statement
Statement – envia instruções SQL ao DBMS
Exemplo :
Statement s = conn.createStatement();
// permite actualizar a base (criar, inserir, apagar…):
s.executeUpdate( "INSERT INTO Tabela1 " + "VALUES ('Pedro',4)" );
// ou consultar a base (fazer um query) :
ResultSet r = s.executeQuery( "SELECT * " + "FROM tabela1" );
5
Linguagens de Programação
JDBC – Acesso a Bases de Dados
ResultSet
ResulSet – tabela de dados que contém os resultados de um query à base de dados
Exemplo :
ResultSet r = s.executeQuery( "SELECT * " + "FROM tabela1" );
// o método next permite aceder a cada linha do ResultSet
while(r.next()) {
// os métodos getXXX permitem aceder aos tipos de dados em SQL
String JNome = r.getString("Nome");
int JNumero = r.getInt("Numero");
System.out.println(JNome+" "+" "+JNumero);
}
// outra maneira de identificar as colunas de uma tabela na base de dados :
String JNome = r.getString(1);
int JNumero = r.getInt(2);
Mesmo que o ResultSet só tenha uma linha, é necessário utilizar next() para aceder a essa
linha, pois inicialmente o cursor está posicionado antes da primeira linha.
6
Linguagens de Programação
JDBC – Acesso a Bases de Dados
Exemplo completo em modo Applet :
import javax.swing.*;
import java.sql.*;
import com.sybase.jdbcx.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
public class AppletAcessoBD1 extends JApplet {
JButton b1 = new JButton("Acede a BD");
JTextField t = new JTextField("Acede à base ", 30);
ActionListener a1 = new ActionListener() {
public void actionPerformed(ActionEvent e){
t.setEditable(true);
SybDriver sybDriver = null;
// Carrega o driver Sybase jdbc
try
{ Class c = Class.forName("com.sybase.jdbc2.jdbc.SybDriver");
sybDriver = (SybDriver) c.newInstance();
DriverManager.registerDriver((Driver) sybDriver);
}
catch (Exception ex)
{
System.out.println("Não consegue carregar o Sybase JDBC driver. " + ex);
ex.printStackTrace();
}
String dbUrl = "jdbc:sybase:Tds:localhost:2638";
try {
Properties props = new Properties();
props.put("user", "dba");
props.put("password", "sql");
Connection conn = DriverManager.getConnection (dbUrl, props);
7
Linguagens de Programação
JDBC – Acesso a Bases de Dados
// Abre ligacao
Statement s = conn.createStatement();
// Codigo SQL :
s.executeUpdate(
"INSERT INTO Tabela1 " +
"VALUES ('Pedro',4)"
);
ResultSet r = s.executeQuery(
"SELECT * " +
"FROM tabela1"
);
boolean b = false;
while(r.next()) {
String JNome = r.getString("Nome");
int JNumero = r.getInt("Numero");
System.out.println(JNome+" "+" "+JNumero);
}
s.close(); // Fecha statement
conn.close(); // Fecha connection
}
catch (SQLException sqe)
{ System.out.println("Excepcao : " + sqe.toString() + ", sqlstate = " +
sqe.getSQLState());
sqe.printStackTrace();
System.exit(1);
}
catch(Exception exp) { exp.printStackTrace(); }
}
};
public void init() {
b1.addActionListener(a1);
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
cp.add(b1); cp.add(t);
}
}
8
Linguagens de Programação
JDBC – Acesso a Bases de Dados
<HTML>
<HEAD>
<TITLE>MyApplet Example1</TITLE>
</HEAD>
<BODY>
<H1>MyApplet</H1>
<HR>
<P>
<APPLET CODE="AppletAcessoBD1" archive="jconn2.jar"
WIDTH="300" HEIGHT="300">
</APPLET>
</P>
<HR>
</BODY>
</HTML>
9
Download