Java y conexión de base de datos-JDBC (los seis pasos de la comprensión del concepto de JDBC + la configuración y el uso de JDBC, ¡el autor Jun Qingqing lo ofrece y elogia!)

Descripción general de JDBC

¿Cuál es el uso de JDBC?

1.jdbc se usa para conectar nuestra aplicación y base de datos java. El uso de jdbc nos permite leer los datos en la base de datos a través de la aplicación java, y también podemos almacenar los datos;

2. Podemos conectarnos a diferentes bases de datos a través de jdbc, como Oracle, MySQL, sql server, etc.

¿Qué es JDBC?

1. JDBC: abreviatura de Java DataBase Connectivity, es decir, conexión de base de datos java. Es una API de Java utilizada para ejecutar sentencias SQL, que puede proporcionar acceso unificado a una variedad de bases de datos relacionales. Consiste en un conjunto de clases escritas en Java composición del lenguaje y la interfaz.

2. Dado que las capas inferiores de varias bases de datos en el mercado son diferentes, y es imposible para las empresas de desarrollo de Java diseñar sus métodos de conexión de bases de datos correspondientes de acuerdo con cada base de datos en el mercado, por lo tanto, las empresas de desarrollo de Java eligen diseñar clases como JDBC y El método de conexión de base de datos compuesto por la interfaz es implementado por la empresa de la base de datos respectiva para implementar la función JDBC correspondiente a la base de datos.

En resumen, la API de Java proporciona interfaces estándar para operar bases de datos y, finalmente, diferentes desarrolladores de bases de datos implementan estas interfaces estándar para operar la base de datos, y los programadores solo necesitan aprender a usar especificaciones estándar.

Inserte la descripción de la imagen aquí

API de JDBC

API JDBC: clases e interfaces para que los programadores llamen, integradas en el paquete java.sql.

Varias clases e interfaces que deben usarse:

Clase DriverManager: administra varias conexiones JDBC;

Interfaz de conexión: conexión a una base de datos específica;

Interfaz de declaración: ejecutar sql

Interfaz PrepardeStatement: ejecutar sql

Interfaz ResultSet: recibe los resultados de la consulta

Construcción y uso de JDBC

Para explicar, utilizo IntelliJ IDEA 2020.2.1, mysql8 para las herramientas de desarrollo aquí. Aquí hay solo una breve introducción. Las diferentes versiones de las herramientas de desarrollo y mysql no afectan el uso, pero hay algunos pequeños puntos que deben prestar atención a la mayor parte No hay problema.

1 Importe el paquete del controlador de la base de datos

El paquete de controladores que utilizo aquí es

mysql-connector-java-8.0.16.jar

Debe elegir el paquete de controlador de base de datos correspondiente de acuerdo con la versión de su base de datos.

La operación de importar el paquete del controlador de la base de datos es la siguiente:

1. Cree un directorio lib en el proyecto del proyecto y copie el paquete del controlador en el directorio lib.

Inserte la descripción de la imagen aquí

2. Busque la estructura del proyecto (Estructura de proyecto) en Archivo—> Bibliotecas—> haga clic en el signo +, seleccione java—> seleccione el paquete jar recién importado en el proyecto—> Aceptar—> Aplicar

Inserte la descripción de la imagen aquí

3. Se completó la importación del paquete del controlador de la base de datos.

2 Cargue el controlador de la base de datos

Registrar el controlador JDBC: Requiere la identificación inicial del controlador, para que se pueda abrir el canal de comunicación con la base de datos.

método uno

Utilice el mecanismo de reflexión para cargar la clase Driver y proporcione la dirección de la clase

Class.forName("com.mysql.cj.jdbc.Driver"); //这是mysql8的方式
//利用反射机制加载Driver类
try {
    
    
    Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
    
    
    e.printStackTrace();
}

Camino dos

Utilice DriverManager para registrarse con el controlador dado.

DriverManger.registerDriver(new Driver());
//需要抛一个异常
try {
    
    
    DriverManager.registerDriver(new Driver());
} catch (SQLException throwables) {
    
    
    throwables.printStackTrace();
}

3 Establezca una conexión a la base de datos

Aquí necesita el método DriverManger.getConnection () para crear un objeto Connection, que representa una base de datos conectada físicamente.

Connection connection = DriverManager.getConnection(URL,User,Passwd);
URL: jdbc:mysql://ip(127.0.0.1):端口(3306)/数据库名?characterEncoding=utf-8
	&useSSL=false&serverTimezone=UTC
	?后面的都是参数,使用&符号连接,键=值&键=值
	characterEncoding=utf8 编码格式
    useSSL=false 安全连接,现在为false
    serverTimezone=UTC 时区
User:用户名
Passwd:密码
try {
    
    
	String url = "jdbc:mysql://127.0.0.1:3306/test_db?characterEncoding=utf-8" +
					"&useSSL=false&serverTimezone=UTC";
	Connection connection = DriverManager.getConnection(url,"root","root");
} catch (SQLException throwables) {
    
    
	throwables.printStackTrace();
}

4 Envíe la declaración sql a la base de datos

Esto es principalmente para manipular la base de datos a través del programa java, y necesita aprender dos clases para enviar declaraciones SQL, Statement y PrepareStatement.

Declaración

Obtenga el objeto Statement para enviar sentencias SQL a la base de datos

Statement st = connection.createStatement();

Dos métodos importantes

executeUpdate(String sql);
用于执行ddl(结构定义)语句和dml(增,删,改)语句
执行ddl语句返回0,执行dml返回被操作的行数,为Int型


executeQuery(String sql);
用于执行查询语句 返回一个ResultSet集合

Nota

使用Statement类发送sql语句需要拼接字符串,拼接字符串的方法为:双引号双加号"+内容+",如果数据库本身的字段为字符串还需要再加上单引号,即'"+内容+"',事例如下
//获得Statement对象
            Statement st = connection.createStatement();

            //发送sql语句
            String name = "小明";
            String sex = "女";
            String age = "18";
            String deptId = "3";

            int res = st.executeUpdate("" +
                    "insert into t_staff(s_name,s_sex,s_age,s_dept_id)" +
                    "values('"+name+"','"+sex+"',"+age+","+deptId+")");
            System.out.println(res);//1,被修改了一行

PrepareStatement

Obtenga el objeto PrepareStatement para enviar una declaración SQL a la base de datos

注意,prepareStatement中的参数位置使用占位符?
PrepareStatement ps = connection.PrepareStatement("sql语句,参数位置使用?");

Dos métodos importantes

executeUpdate(String sql);
用于执行ddl(结构定义)语句和dml(增,删,改)语句
执行ddl语句返回0,执行dml返回被操作的行数,为Int型


executeQuery(String sql);
用于执行查询语句 返回一个ResultSet集合

Nota

为sql语句设置相应参数使用
ps.set相应类型(对应参数位置,参数)
的方法
//获得PrepareStatement
            PreparedStatement ps = connection.prepareStatement(
                    "insert into t_staff(s_name,s_sex,s_age,s_dept_id)" +
                            "values(?,?,?,?)"
            );
            String name = "小暗";
            String sex = "男";
            String age = "19";
            String deptId = "2";

            ps.setString(1,name);
            ps.setString(2,sex);
            ps.setString(3,age);
            ps.setString(4,deptId);

            //发送
            int res = ps.executeUpdate();
            System.out.println(res);

5 Reciba el resultado de la consulta

Aquí usaremos la clase ResultSet;

El método executeQuery () en PreparedStatement y Statement devolverá un objeto ResultSet, y el resultado de la consulta se encapsulará en este objeto;

Utilice el método next () en ResultSet para obtener la siguiente fila de datos;

Utilice el método getXXX (String name) para obtener el valor;

Se presenta un código de consulta completo

import java.sql.*;

public class Hello {
    public static void main(String[] args) {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        try {
            String url = "jdbc:mysql://127.0.0.1:3306/test_db?characterEncoding=utf-8" +
                    "&useSSL=false&serverTimezone=UTC";
            Connection connection = DriverManager.getConnection(url, "root", "root");

            //获得PrepareStatement
            PreparedStatement ps = connection.prepareStatement(
                    "select * from t_staff where s_id=?"
            );
            ps.setInt(1,3);

            //发送
            ResultSet res = ps.executeQuery();
            Test test = new Test();
            while(res.next()){
                test.setS_id(res.getInt("s_id"));
                test.setS_name(res.getString("s_name"));
                test.setS_sex(res.getString("s_sex"));
                test.setS_age(res.getInt("s_age"));
                test.setS_dept_id(res.getInt("s_dept_id"));
                test.setS_money(res.getInt("s_money"));
            }
            System.out.println(test.toString());
            //Test{s_id=3, s_name='虞姬', s_sex=女, s_age=29, s_dept_id=3, s_money=2800}

            //关闭连接
            ps.close();
            connection.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}
class Test{
    private int s_id;
    private String s_name;
    private String s_sex;
    private int s_age;
    private int s_dept_id;
    private int s_money;

    public void setS_id(int s_id) {
        this.s_id = s_id;
    }

    public void setS_name(String s_name) {
        this.s_name = s_name;
    }

    public void setS_sex(String s_sex) {
        this.s_sex = s_sex;
    }

    public void setS_age(int s_age) {
        this.s_age = s_age;
    }

    public void setS_dept_id(int s_dept_id) {
        this.s_dept_id = s_dept_id;
    }

    public void setS_money(int s_money) {
        this.s_money = s_money;
    }

    @Override
    public String toString() {
        return "Test{" +
                "s_id=" + s_id +
                ", s_name='" + s_name + '\'' +
                ", s_sex=" + s_sex +
                ", s_age=" + s_age +
                ", s_dept_id=" + s_dept_id +
                ", s_money=" + s_money +
                '}';
    }
}

6 Cierre el canal de conexión de la base de datos

Cerrar todos los canales de conexión con la base de datos después de que se complete cada operación

方法:close()

Supongo que te gusta

Origin blog.csdn.net/Lotus_dong/article/details/113097412
Recomendado
Clasificación