JDBC Java Database Connectivity JDBC • Especificação para uso de base de dados em aplicações e applets JAVA; • API para uso de drivers JDBC; • Compatível com ANSI SQL-92. 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 • Carregando drivers JDBC: Class.forName(“jdbc.odbc.JdbcOdbcDriver”); Class.forName(“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/BancoProfessores JDBC API • Estabelecendo uma Conexão Connection con = DriverManager.getConnection(String url, String User, String Pass); Connection con = DriverManager.getConnection(String url); 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 ResultSet - Exemplo a -------12345 83472 83492 b -------------Cupertino Redmond Boston c -------4.5 3.56 0.02 Forma Geral java.sql.Statement stmt = con.createStatement(); ResultSet r = stmt.executeQuery("SELECT a, b, c FROM Table1"); while ( r.next( ) ) { int i = r.getInt("a"); String s = r.getString("b"); float f = r.getFloat("c"); System.out.println("ROW = " + i + " " + s + " " + f); }