DBHelper
pacote com.nll.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DBHelper {
// driver de carregamento geralmente carrega apenas uma vez
estático {
tente {
// primeira etapa Carregar o driver
//mysql5.0+ versão ("com.mysql.cj.jdbc.Driver") versão 8.0+ ("com.mysql.cj.jdbc.Driver")
Class.forName ("oracle.jdbc.OracleDriver") ;
} catch (ClassNotFoundException e) {
// TODO bloco de captura gerado
automaticamente e.printStackTrace ();
}
}
public static Connection getConnection () {
// O segundo passo é estabelecer uma conexão. Também a encapsulamos. Por que é principalmente muito tempo para gravar problemas
Connection conn = null;
try {
// o mysql pode ser alterado para "jdbc: mysql: // localhost: 3306 / [nome do banco de dados]? allowPublicKeyRetrieval = true & serverTimezone = UTC & useSSL = false & characterEncoding = UTF-8"
conn = DriverManager.getConnection ("jdbc: oracle: thin: @ 127.0 .0.1: 1521: orcl "," scott "," scott ");
} catch (SQLException e) {
// TODO Bloco de captura gerado
automaticamente e.printStackTrace ();
}
return conn;
}
// O terceiro passo é para nós a escrever a instrução SQL instrução SQL apenas um parâmetro declaração preparada objetos dentro dela e não a mesma declaração função SQL não é o mesmo
// Então vamos acabar declaração sql-lo como um parâmetro para
// CRUD Ambos são o mesmo método executeUpdate e o valor de retorno é o mesmo
//, portanto, adicionamos,
excluímos e mudamos juntos quando encapsulamos public int doUpdate (String sql, Object ... params) {
// Primeiro obtém a conexão
Connection conn = getConnection ();
// Determine um valor de retorno
int result = -1;
tente {
// Objeto
PreparedStatement PreparedStatement pstmt = conn.prepareStatement (sql);
// E os parâmetros, haverá espaços reservados?
// Como não apenas a adição, exclusão e
modificação de parâmetros de membros, também temos parâmetros para nossa consulta, também encapsulamos doParams (pstmt, params);
// Executa a instrução SQL
result = pstmt.executeUpdate ();
closeAll (null, conn, pstmt);
} catch (SQLException e) {
// TODO bloco catch gerado
automaticamente e.printStackTrace ();
}
return result;
}
public List <Map <String, String >> findAll (String sql, Object ... params) {
List < Map <String, String >> list = new ArrayList <Map <String, String >> ();
tente {
// primeiro obtenha a conexão
Connection conn = getConnection ();
ResultSet resultset = null;
// Objeto
PreparedStatement PreparedStatement pstmt = conn.prepareStatement (sql);
// E os parâmetros, haverá espaços reservados?
// Como não apenas a adição, exclusão e
modificação de parâmetros de membros, também temos parâmetros para nossa consulta, portanto também encapsulamos doParams (pstmt, params);
resultset = pstmt.executeQuery ();
// Como obter a chave do Map- "O campo desta instrução sql
// Primeiro, devemos obter os metadados pelo conjunto de resultados
ResultSetMetaData rsmd = resultset.getMetaData ();
String [] columnNames = new String [rsmd .getColumnCount ()];
for (int i = 0; i <columnNames.length; i ++) {
// Observe que as chaves que chegamos aqui estão todas em maiúsculas, por isso, mudamos para o minúsculo
columnNames [i] = rsmd.getColumnName ( i + 1) .toLowerCase ();
}
while (resultset.next ()) {
Map <String, String> map = new HashMap <String, String> ();
// De acordo com o nome da coluna ao qual o valor deve
ser (String cn: columnNames) {
Valor da string = resultset.getString (cn);
map.put (cn, valor);
}
// lista.
lista.add (mapa);
}
closeAll (conjunto de resultados, conn, pstmt);
} catch (SQLException e) {
// TODO Bloco de captura gerado
automaticamente e.printStackTrace ();
}
lista de retorno;
}
private void closeAll (ResultSet rs, Connection connection, PreparedStatement pstmt) {
// TODO stub de método gerado automaticamente:
{
if (rs! = null) {
rs.close ();
}
if (conn! = null) {
conn.close ();
}
if (pstmt! = null) {
pstmt.close ();
}
} catch (SQLException e) {
// TODO Bloco de captura gerado
automaticamente e.printStackTrace ();
}
}
private void doParams (PreparedStatement pstmt, Object ... params) {
// Primeiro determine se o usuário não passou o parâmetro, então não precisamos injetar o parâmetro
if (params! = null && params.length> 0) {
// Injetamos apenas o parâmetro Object ... o parâmetro do quantificador , Essencialmente, uma matriz
para (int i = 0; i <comprimento do parâmetro; i ++) {
// tudo é um objeto
try {
pstmt.setObject (i + 1, params [i]);
} catch (SQLException e) {
// TODO Bloco de captura gerado
automaticamente e.printStackTrace ();
}
}
}
}
}
Test.java
pacote com.nll.dao; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import java.util.Map; public class Test1 { public static void main (String [] args) { // TODO Método stub gerado automaticamente // Teste o encapsulamento do jdbc // Como não somos um método estático, instancie primeiro o DBHelper db = new DBHelper (); // // grave a instrução SQL sem parâmetros // String sql1 = "atualizar o ID do conjunto autoincre_demo = id + 1"; // int result1 = db.doUpdate (sql1); // if (result1> 0) { // System.out.println ("modificado com sucesso"); // } else { // System.out.println ("modificado com falha" ); // } // // Grava a instrução sql (com parâmetros) // String sql = "update autoincre_demo set NAME =?"; // // Executa // int result = db.doUpdate (sql, "Haikou" ); // if (result> 0) { // System.out.println ("Modificado com sucesso"); // } else { // System.out.println ("Falha na modificação"); // } // 操作 操作 String sql2 = "selecione * de autoincre_demo" ; Lista <Mapa <String, String >> list = db.findAll (sql2); for ( int i = 0; i <list.size (); i ++ ) { System.out.println (list.get (i) .get ( "nome" ))); } } }