[JavaWeb] Introducción detallada de JDBC


Uno, principio JDBC

JDBC (Java Database Connectivity): proporciona un método de acceso unificado para una variedad de DBMS de bases de datos relacionales y se da cuenta del uso de Java para operar la base de datos.


2. Funciones principales de la API de JDBC:

DriverManager : administrar controladores JDBC

Conexión : conéctese a la base de datos (generada por DriverManager)

Declaración : Agregar, eliminar, modificar y verificar la base de datos. (Generado por Connection)

PreparedStatement : se utiliza para ejecutar consultas SQL y actualizaciones que contienen parámetros dinámicos (generados a través de Connection)

CallableStatement : llamar a un procedimiento almacenado / función almacenada en la base de datos (generado por Connection)

ResultSet : el conjunto de resultados devuelto (generado por varias declaraciones)


Tres, proceso de ejecución de JDBC:

1: Conéctese a una fuente de datos, como una base de datos.

2: Pase las instrucciones de consulta y actualización a la base de datos.

3: Procese la respuesta de la base de datos y devuelva el resultado.


Cuatro, Declaración

Base de datos de operaciones de declaración:
         agregar, eliminar y modificar: executeUpdate ();
         consulta: executeQuery ();
         getString (Int, etc.): obtener un valor específico por nombre de campo

Código:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

public class JDBCDemo {
    
    
	private static final  String URL = "jdbc:mysql://127.0.0.1:3306/jdbc?serverTimezone=UTC&characterEncoding=UTF-8";
	private static final  String name = "root"; //账号
	private static final  String pwd = "123456"; //密码
	
	public static void update() {
    
     //增删改操作
		
		try{
    
    
			//导入驱动,加载具体的驱动类(新的要加cj)
			Class.forName("com.mysql.cj.jdbc.Driver");
			
			//与数据库建立连接
			Connection conn = DriverManager.getConnection(URL,name,pwd);
			
			//发送sql语句
			Statement stmt = conn.createStatement();
			String sql = "insert into info values('zhangsan',20)";
			
			//执行sql语句
			int count = stmt.executeUpdate(sql); //返回值为修改的行数
			if(count>0){
    
    
				System.out.println("操作成功!");
			}
			
			//关闭连接
			if(stmt!=null) stmt.close();
			if(conn!=null) conn.close();
			
		}catch(Exception e){
    
    
			e.printStackTrace();
		}
	}
	
	public static void query(){
    
     //查询操作
		
		try{
    
    
			//导入驱动,加载具体的驱动类
			Class.forName("com.mysql.cj.jdbc.Driver");
			
			//连接数据库
			Connection conn = DriverManager.getConnection(URL,name,pwd);
			
			//发送sql语句
			Statement stmt = conn.createStatement();
			String sql = "select * from info";
			
			//执行查询,获取结果集
			ResultSet st = stmt.executeQuery(sql);
			
			//处理结果集
			while(st.next()){
    
    
				String name = st.getString("name");
				int age = st.getInt("age");
				System.out.println("姓名:" + name + "    " + "年龄:" + age);
			}
			
			//关闭连接
			if(st!=null) st.close();
			if(stmt!=null) stmt.close();
			if(conn!=null) conn.close();
			
			}catch(Exception e){
    
    
				e.printStackTrace();
			}
	}
	
	public static void main(String[] args) {
    
    
		//update();
		query();
	}
}


五 、 PreparedStatement

La interfaz pública PreparedStatement extiende la declaración

Subinterfaz de declaración

Base de datos de operaciones PreparedStatement:
         agregar, eliminar y modificar: executeUpdate ();
         consulta: executeQuery ();
         operación de asignación: setString (Int, etc.)

Código:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class JDBCPreparedStatementDemo {
    
    
	private static final String URL = "jdbc:mysql://127.0.0.1:3306/jdbc?serverTimezone=UTC&characterEncoding=UTF-8";
	private static final String name = "root"; //账号
	private static final String pwd = "123456"; //密码
	
	
	public static void update(){
    
    
		try{
    
    
			//加载驱动
			Class.forName("com.mysql.cj.jdbc.Driver");
			
			//连接数据库
			Connection conn = DriverManager.getConnection(URL,name,pwd);
			
			String sql = "insert into info values(?,?)";
			PreparedStatement pstmt = conn.prepareStatement(sql);  ///预编译
			pstmt.setString(1, "lisi"); //设置第一个?的值
			pstmt.setInt(2, 18); //设置第二个?的值
			
			//cnt表示增删改数据的条数
			int cnt = pstmt.executeUpdate();
			
			if(cnt>0){
    
    
				System.out.println("操作成功!");
			}
			
			//关闭连接
			if(pstmt!=null) pstmt.close();
			if(conn!=null) conn.close();
			
		}catch(Exception e){
    
    
			e.printStackTrace();
		}
	}
	
	public static void query(){
    
    
		try{
    
    
			
			//加载驱动
			Class.forName("com.mysql.cj.jdbc.Driver");
			
			//数据库连接
			Connection conn = DriverManager.getConnection(URL,name,pwd);
			
			String sql = "select * from info";
			PreparedStatement pstmt = conn.prepareStatement(sql);
			
			//查询
			ResultSet st = pstmt.executeQuery();
			
			while(st.next()){
    
    
				String name = st.getString("name");
				int age = st.getInt("age");
				System.out.println("姓名: " + name + "  " + "年龄:" + age);
			} 
			
			//关闭连接
			if(st!=null) st.close();
			if(pstmt!=null) pstmt.close();
			if(conn!=null) conn.close();
		}catch(Exception e){
    
    
			e.printStackTrace();
		}
	}
	
	
	
	public static void main(String[] args) {
    
    
		// TODO Auto-generated method stub
		//update();
		query();
	}

}

resultado de la operación:

Inserte la descripción de la imagen aquí


Seis, la diferencia entre Statement y PrepareStatement

1 La diferencia de uso:

1.Declaración:

(1) Cadena sql = ""

(2) executeUpdate (sql)


2.Declaración preparada:

(1) String sql = "" (¿Puede haber marcadores de posición en la instrucción sql?)

(2) prepareStatement (sql), cuando se crea PreparedStatement, la declaración sql está precompilada,

(3) SetString (Int, etc.) ¿Reemplazar marcadores de posición?
Por ejemplo : setString (1, "zhangsan") Reemplazar la posición del primer marcador de posición con "zhangsan"

(4) executeUpdate ()



2 razones por las que se recomienda PreparedStatement:

1: la codificación es más simple y puede evitar empalmes de cuerdas complicados

2: Mejor rendimiento, más rápido que la declaración a través de la compilación previa (ejecutar solo una vez)

3: al usar marcadores de posición, el código es altamente legible y fácil de mantener

4; Más seguro, previene eficazmente la inyección de SQL, y la declaración tiene el riesgo de ser inyectada

(Inyección SQL: el código ingresado por el usuario se mezcla con la declaración SQL, las comillas están emparejadas, etc., ¡para que la información incorrecta se registre correctamente!)


Supongo que te gusta

Origin blog.csdn.net/weixin_45260385/article/details/109301754
Recomendado
Clasificación