JAVA DATABASE CONNECTIVITYJDBC
JDBC O Java Database Connectivity (JDBC) API é o
padrão da indústria para que aplicações Java acessem bancos de dados relacionais.
O JBDC provê um conjunto de interfaces para acesso ao BD.• Uma implementação em particular dessas interfaces é
chamada de driver.• Cada BD possui um Driver JDBC específico (que é usado
de forma padrão - JDBC).• O drivers de outros fornecedores devem ser adicionados
ao CLASSPATH da aplicação para poderem ser usados.• Desta maneira, pode-se mudar o driver e a aplicação
não muda.
Servlets e JDB
C
JDBCServlets e JD
BC
JAVA.SQL – PRINCIPAIS INTERFACES• Connection
– Conexão (sessão) com um banco de dados específico– Contexto para execução de comandos SQL e retorno
de conjunto de resultados• Statement
– Comandos SQL estáticos– Execução e obtenção de resultados de comandos SQL
• PreparedStatement– Comandos SQL pré-compilados– Definição de parâmetros para o comando SQL antes
de executá-lo
JDBC• Java Database Connectivity• API disponível no pacote java.sql• Interfaces padronizadas para acesso a bancos de
dados relacionais– Independente de fornecedor de SGBD do ponto de
vista da aplicação• Cada fabricante de banco de dados implementa
estas interfaces• Interpretação dos comandos SQL somente em
tempo de execução da aplicação!
JAVA.SQL – PRINCIPAIS INTERFACES(CONTINUAÇÃO)
CallableStatement Execução de procedimentos armazenados (stored
procedures) ResultSet
Permite acesso aos dados de tabelas Normalmente é resultado da execução de um
Statement (ou PreparedStatement)
JAVA.SQL – PRINCIPAIS CLASSES DriverManager
Maneira básica de manipular drivers JDBC Diversos métodos estáticos Método getConnection() retorna objeto do tipo
Connection SQLException (exceção)
Exceções que podem ser geradas por diversos métodos da API JDBC
CONEXÃO AO SGBD - PASSOS Carga do driver
método Class.forName() Estabelecimento da conexão
através da classe DriverManager
CARGA DO DRIVER Feita pela chamada do método Class.forName() Indica driver(s) a ser(em) utilizado(s) na aplicação Assinatura do método
public static Class forName(String className) throws ClassNotFoundException
Exemplos Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”) Class.forName(“oracle.jdbc.driver.OracleDriver”)
É necessário que a implementação do driver esteja no CLASSPATH
CLASSE DRIVERMANAGER Maneira básica de manipular drivers JDBC Assinatura do método getConnection():
static Connection getConnection (String url, String user, String password) Retorna uma conexão ao banco de dados (Connection) url - identifica o banco de dados user - indica o usuário para conexão ao SGBD password - indica senha para conexão ao SGBD
Exemplos con = DriverManager.getConnection(“jdbc:odbc:Exemplo");
estabelece conexão com uma fonte de dados ODBC chamada “Exemplo” con = DriverManager.getConnection( "jdbc:oracle:thin:@200.135.24.52:1521:ORAZ","aluno21", "aluno21");
estabelece conexão usando utilizando um driver do tipo 4 da Oracle Necessário conhecer (em tempo de execução):
Identificação da classe que implementa o driver (para carga) Tipo do driver a ser utilizado
CONEXÃO AO SGBD – EXEMPLO FIREBIRD
import java.sql.*;public class ConexaoFireBird {public static void main (String args[]) throws Exception
{Class.forName("org.firebirdsql.jdbc.FBDriver" );
Connection connection = DriverManager.getConnection("jdbc:firebirdsql:localhost/3050:C://livros.GDB", “SYSDBA”,”masterkey” );...
Carga do driver
url:jdbc:firebirdsql – protocolo (jdbc) e subprotocolo (identificação do driver tipo firebird)localhost– endereço (ou nome) do servidor3050 - porta de comunicaçãoLivros.GDB - identificação do banco de dados
Acesso às definições do
pacote java.sql
CONEXÃO AO SGBD – EXEMPLO MYSQLimport java.sql.*;public class ConexaoMySQL {public static void main (String args[]) throws Exception
{Class.forName("com.mysql.jdbc.Driver" );
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/books", “root”,”root” );...
Carga do driver
url:jdbc:mysql – protocolo (jdbc) e subprotocolo (identificação do driver tipo mysql)localhost– endereço (ou nome) do servidorbooks - identificação do banco de dados
Acesso às definições do
pacote java.sql
EXECUÇÃO DE COMANDOS SQL Através de statements
Statements são criados a partir de uma conexão Classes que podem representar statements
Statement PreparedStatement CallableStatement
Processamento do resultado Interface ResultSet
INTERFACE CONNECTION Conexão (sessão) com um banco de dados
específico Contexto para execução de comandos SQL e
retorno de conjunto de resultados Objetos deste tipo são criados pelo método
DriverManager.getConnection()
INTERFACE CONNECTION PRINCIPAIS MÉTODOS public Statement createStatement() throws SQLException cria um objeto do tipo Statement para posterior
execução de comandos SQL public PreparedStatement prepareStatement(String sql)
throws SQLException cria um objeto do tipo PreparedStatement para posterior
execução de comandos SQL public CallableStatement prepareCall(String sql)
throws SQLException cria um objeto do tipo CallableStatement para
chamadas a stored procedures
INTERFACE STATEMENT Representação de comandos SQL Objetos deste tipo são criados pelo método
Connection.createStatement() Principais métodos
public ResultSet executeQuery(String sql) throws SQLException executa o comando SQL do parâmetro e retorna o resultado da query em um
objeto ResultSet usado para comandos SQL select exemplo
Statement st = con.createStatement();ResultSet rs=st.executeQuery( “select nm_cliente from cliente where cd_cliente = 1”);
public int executeUpdate(String sql) throws SQLException executa o comando SQL do parâmetro e retorna o número de linhas
atualizadas usado para comandos SQL insert, update e delete Exemplo Statement st = con.createStatement();
int n = st.executeUpdate( “update item_pedido set qt_pedida=0”);
public void close() throws SQLException
INTERFACE RESULTSET• Objetos deste tipo criados através de um
Statement• Representação do resultado de uma query• Manutenção de um cursor apontando para a linha
de dados corrente– cursor inicialmente posicionado antes da primeira linha– método next() move o cursor para a próxima linha
• Métodos getXXX() obtém os valores da linha corrente– através da posição relativa da coluna (iniciando em 1)– através do nome da coluna– XXX indica o tipo (Java) a ser retornado
INTERFACE RESULTSETPRINCIPAIS MÉTODOS public boolean next() throws SQLException
posiciona o cursor na próxima linha de dados cursor inicialmente posicionado antes da primeira linha o primeiro chamado para este método torna a primeira linha a linha
corrente, a segunda chamada a segunda e linha e assim por diante retorno
true se a próxima linha é valida false se não há mais linhas
public XXX getXXX(int columnIndex) throws SQLException acessa valor da linha de dados corrente pelo posição relativa da
coluna public XXX getXXX(String columnName) throws SQLException
acessa valor da linha de dados corrente pelo nome da coluna public boolean wasNull() throws SQLException
Retorna true se o último método getXXX() acessou a uma coluna com valor SQL null (senão retorna false)
public void close() throws SQLException
EXEMPLO EXECUTESQLMYSQL.JAVA...connection = DriverManager.getConnection(DATABASE_URL,
USERNAME,PASSWORD );statement = connection.createStatement();ResultSet rs = statement.executeQuery("SELECT authorID, firstName, lastName
FROM authors");
while (rs.next()) {
System.out.printf( "%d\t", rs.getInt( 1 ) );System.out.printf( "%s\t", rs.getString( 2 ) );System.out.printf( "%s\t", rs.getString( "lastName" );System.out.println();
}...
Servlets e JDB
C
INTERFACE PREPAREDSTATEMENT Representação de comandos SQL (assim como Statement) Substituição de parâmetros (símbolo “?”) através dos métodos setXXX Utilizado para comandos SQL executados múltiplas vezes e onde se
alteram alguns parâmetros Exemplo ...
int cdPedido, cdProduto; float qtPedida;... String insertItem = "insert into item_pedido (cd_pedido, cd_produto, qt_pedida) " + " values (?, ?, ?)"; PreparedStatement pstItem = con.prepareStatement(insertItem);
pstItem.setInt (1, cdPedido); //substitui primeiro “?” por um int pstItem.setInt (2,cdProduto); //substitui segundo “?” por um int pstItem.setFloat(3, qtPedida); //substitui terceiro “?” por um float pstItem.executeUpdate(); //executa comando SQL } ...
EXEMPLO PREPAREMYSQL.JAVA//Conulta com parâmetros PreparedStatement ps =
connection.prepareStatement("SELECT authorID, firstName, lastName FROM authors where authorID=(?)");
ps.setInt(1,3);//configura paâmetro 1 com valor=3//Executa consultaResultSet rs=ps.executeQuery();
Servlets e JDB
C
INTERFACE CALLABLESTATEMENTServlets e JD
BC
– fornece uma interface uniforme para especificar os parâmetros de entrada e saída para procedures armazenadas e para invocar procedures armazenadas.
• public void registerOutParameter((int parameterIndex, int sqlType)
) throws SQLException– Registra parâmetro de saída.
• public void setXXXX(int parameterIndex, XXX valor) ) throws SQLException
– Configura parâmetro com valor
– XXX é um tipo Java• public void execute() ) throws SQLException
– Método herdado de PreparedStatement que executa a procedure
INTERFACE CALLABLESTATEMENTServlets e JD
BC
– O parâmetro do método prepareCall da interface Connection deve ter o seguinte formato para procedures com retorno:
{?= call <procedure-name>[<arg1>,<arg2>, ...]}
– Para procedures sem retorno:
{call <procedure-name>[<arg1>,<arg2>, ...]}
EXEMPLOServlets e JD
BC
...CallableStatement cs = connection.prepareCall("{?=call
PROC_JAVA(?,?)}");cs.registerOutParameter(1, Types.INTEGER);
cs.setInt(2, valor1);cs.setInt(3, valor2);cs.execute();
...
TIPOS JDBC X MÉTODOS GETXXX()TIPOS DEFINIDOS NA CLASSE JAVA.SQL.TYPES
Top Related