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); }