O JDBC (Java Database Conectivity) é a API do Java que contém os elementos necessários para que uma aplicação Java possa acessar SGBD relacionais;
- Utiliza extensivamente a SQL (Structured Query Language);
- Esta API é composta pelos pacotes java.sql e javax.sql, os quais fazem parte do JavaSE
O JDBC faz automaticamente o mapeamento de tipos de dados existentes no banco de dados para os tipos do Java (nativos ou classes específicas).
Tipo Sql | Tipo Java |
---|---|
BIGINT | long |
VARCHAR | java.lang.String |
A classe DriverManager é responsável por administrar e selecionar tal driver conforme o banco de dados específico, possibilitando efetuar a conexão;
try {
Connection con = DriverManager.getConnection
("jdbc:mysql://localhost/exemploDb","user","senha");
} catch (SQLException e) {
//conexão não foi possível
}
A operação interativa sobre o banco de dados se faz por meio da interface java.sql.Statement, que permite o envio de comandos SQL estáticos.
Por meio do método createStatement()
disponível na interface Connection
, é possível
obter um objeto que implementa esta
interface;
Statement stmt = con.createStatement();
Um objeto ResultSet
representa uma espécie de tabela
dinâmica, dotada de um cursor que pode navegar por
suas linhas;
ResultSet rs = stmt.executeQuery("SELECT * FROM CLIENTE
WHERE SOBRENOME=\"Wandresen\"");
O conteúdo das colunas do registro em que está posicionado o cursor pode ser recuperado por meio de um método de acesso específico, conforme seu tipo:
- getInt para INT ou INTEGER;
- getDouble para DOUBLE ou FLOAT;
- getFloat para REAL;
- getTime para TIME;
- O método getObject pode ser usado sem qualquer restrição;
- O método getString converte o conteúdo da coluna em um objeto String;
Todos eles podem ser utilizados enviando-se como argumento o índice da coluna (iniciado em 1) ou o nome da coluna (String);
String nomePlaneta = rs.getString(“NOME”);
String nomePlaneta = rs.getString(2);
Exemplo: Busca um Cliente.
public static void getCliente(){
//Pega uma conexao
Connection conexao = new ConnectionFactory().getConnection();
//Cria um Statement
Statement stmt = conexao.createStatement();
//Guarda o resultado da busca
ResultSet rs = stmt.executeQuery("SELECT * FROM CLIENTE
WHERE SOBRENOME=\"Wandresen\"");
//Percorrer o ResultSet
while(rs.next()){
System.out.println("------");
System.out.println(rs.getString("nome"));
System.out.println(rs.getString(2));
}
//Fecha a conexão
conexao.close();
}
Um objeto do tipo PreparedStatement
permite
definir um comando SQL que será pré-compilado no
SGBDR, permitindo sua execução eficiente;
O comando SQL preparado pode conter um ou mais parâmetros de entrada, representados pelo símbolo de ? (interrogação);
// Cria a Query
String sql = "INSERT INTO contatos (nome, re, prof)
VALUES (?, ?,?)";
//Cria um PreparedStatement,passando a query criada para o metodo da conexao
PreparedStatement pstmt = con.prepareStatement(sql);
//Seta as VALUES da query
// pstmr.DataType(posicao,valor);
pstmt.setString(1, "Joãozinho");
pstmt.setInt (2, 1105);
pstmt.setBoolean(3, true);
//Retorna o numero de linhas afetadas
int re = pstmt.executeUpdate();
//Fecha o PreparedStatement
pstmt.close();
Ao criar uma PreparedStatement
é possivel passar um segundo paramêtro na função prepareStatement
da Connection.
con.prepareStatement(stmtInserir,PreparedStatement.RETURN_GENERATED_KEYS);
O PreparedStatement.RETURN_GENERATED_KEYS
defini que após uma inserção,seja retornado as chaves primárias criadas no banco de dados.
Pegando as chaves criadas:
/*Pega a primeira chave*/
stmt.executeUpdate();
ResultSet rs = stmt.getGeneratedKeys();
rs.next();
return rs.getInt(1);
O executeUpdate()
deve ser realizado com você utilizar operações que modifique o estado do Banco de Dados como: Update,Delete e Insert.
O valor retornado é o numero de linhas afetadas.
int re = pstmt.executeUpdate();
No executeQuery()
utiliza-se para executar comandos de busca no banco de dados como: Select.
O retorno é os dados buscados no proprio Select
.
ResultSet rs = pstmt.executeQuery();