¿Qué es JDBC? este articulo te lo dice

        El nombre completo de JDBC es Java Database Connect (Java Database Connect), que es un conjunto de API de Java para ejecutar sentencias SQL. Es un puente entre Java y la base de datos. Es una especificación más que una implementación. Puede consultar, actualizar y eliminar datos en la base de datos mediante la ejecución de instrucciones SQL.

        

        La forma en que la aplicación utiliza JDBC para acceder a la base de datos se muestra en la siguiente figura:

        Como se puede ver en la figura anterior, cuando una aplicación usa JDBC para acceder a una base de datos específica, necesita conectarse con diferentes controladores de base de datos. Dado que los controladores de base de datos proporcionados por diferentes proveedores de bases de datos son diferentes, para permitir que el programa de aplicación establezca realmente una conexión con la base de datos, JDBC no solo debe proporcionar una API para acceder a la base de datos, sino que también debe encapsular los detalles de la comunicación. con varios servidores de bases de datos, y las bases de datos de diferentes proveedores tienen la realización correspondiente.

        La siguiente figura describe los detalles de implementación específicos de JDBC, como se muestra en la siguiente figura:

Como puede verse en la figura anterior, la implementación de JDBC consta de tres partes.

        (1) Administrador de controladores JDBC: responsable de registrar un controlador JDBC específico, principalmente a través de la clase java.sql.DriverManager;

        (2) API del controlador JDBC: desarrollada por Sun, la interfaz más importante es la interfaz java.sql.Driver;

        (3) Controlador JDBC: es un controlador de base de datos creado por el fabricante de la base de datos, también conocido como controlador JDBC, que es responsable de conectarse a una base de datos específica y manejar los detalles de comunicación.

        

Pasos de programación JDBC 

        Las bases de datos de varios fabricantes tienen implementaciones correspondientes, y todos los códigos de este artículo están implementados para bases de datos MySQL.

1. Registre el controlador

        Antes de escribir el código, debe instalar la biblioteca de terceros de MySQL. El paquete mysql-connector-java-8.0.29-bin.jar se puede descargar de Internet o encontrar en el directorio de instalación de MySQL.

    try {
        Driver driver = new com.mysql.cj.jdbc.Driver();
        DriverManager.registerDriver(driver);
    } catch (SQLException e) {
        throw new RuntimeException(e);
    }

        El siguiente es el código fuente de la clase com.mysql.cj.jdbc.Driver

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    public Driver() throws SQLException {
    }

    static {
        try {
            DriverManager.registerDriver(new Driver());
        } catch (SQLException var1) {
            throw new RuntimeException("Can't register driver!");
        }
    }
}

        El controlador también se puede cargar a través del método Class.forName. Este método carga esta clase en la JVM. Al cargar, el bloque de inicialización estática se ejecutará para completar el trabajo relacionado con la inicialización del controlador. 

    try {
        Class.forName("com.mysql.cj.jdbc.Driver");
    } catch (ClassNotFoundException e) {
        throw new RuntimeException(e);
    }

2. Establecer una conexión

    String url = "jdbc:mysql://localhost:3306/jdbc"; // 数据库URL
    String user = "root"; // 数据库用户名
    String password = "123456"; // 数据库密码
    Connection conn = null;
    try {
        conn= = DriverManager.getConnection(url, user, password);
    } catch (SQLException e) {
        throw new RuntimeException(e);
    }

3. Obtenga el objeto de operación de la base de datos (objeto precompilado)

        Obtener el objeto de operación de la base de datos para implementar la operación de inserción de la base de datos

public class JDBC {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
        String user = "root";
        String password = "123456";
        Connection conn = null;
        Statement stmt = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);

            stmt = conn.createStatement();
            String sql= "insert into user(id, name, gender, age) values(2, '张三', '男', 18)"; 
            
            stmt.executeUpdate(sql);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

       Obtenga el objeto de operación de la base de datos para implementar la operación de actualización de la base de datos

public class JDBC {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
        String user = "root";
        String password = "123456";
        Connection conn = null;
        Statement stmt = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);

            stmt = conn.createStatement();
            String sql = "update user set name = '张三' where age = 20"; // 修改SQL语句
            
            stmt.executeUpdate(sql);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

        Obtenga el objeto de la operación de la base de datos e implemente la operación de eliminación de la base de datos

public class JDBC {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
        String user = "root";
        String password = "123456";
        Connection conn = null;
        Statement stmt = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);

            stmt = conn.createStatement();
            String sql = "delete from user where name = '张三'"; // 删除SQL语句
            
            stmt.executeUpdate(sql);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

        Obtenga objetos precompilados de la base de datos para implementar operaciones de inserción de la base de datos

public class JDBC {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
        String user = "root";
        String password = "123456";
        Connection conn = null;
        PreparedStatement pre = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);
            String sql = "insert into user(id, name, gender, age) values (?, ?, ?, ?)";

            pre = conn.prepareStatement(sql);
            pre.setInt(1,1);
            pre.setString(2,"张三");
            pre.setString(3,"男");
            pre.setInt(4,18);

            pre.executeUpdate();

        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

4. Conjunto de resultados de consulta de procesamiento

        Obtenga el objeto de operación de la base de datos, realice la operación de consulta de la base de datos e imprima el conjunto de resultados

public class JDBC {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
        String user = "root";
        String password = "123456";
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);

            stmt = conn.createStatement();
            String select = "select * from user where name = '张三'";
            rs = stmt.executeQuery(select);
            while (rs.next()) {
                System.out.println(rs.getString("id") + "," + rs.getString("name")
                + "," + rs.getString("gender") + "," + rs.getString("age"));
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

        Obtenga objetos precompilados de bases de datos, implemente operaciones de consulta de bases de datos e imprima conjuntos de resultados

public class JDBC {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
        String user = "root";
        String password = "123456";
        Connection conn = null;
        PreparedStatement pre = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection(url, user, password);
            String sql = "select * from user where name = ?";

            pre = conn.prepareStatement(sql);
            pre.setString(1,"藏三");

            rs = pre.executeQuery();
            while (rs.next()) {
                System.out.println(rs.getString("id") + "," + rs.getString("name")
                + "," + rs.getString("gender") + "," + rs.getString("age"));
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

5. Liberar recursos

    try {
        if (rs != null) {
            rs.close();
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    try {
        if (statement != null) {
            statement.close();
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    try {
        if (conn != null) {
            conn.close();
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }

        

Las similitudes y diferencias, ventajas y desventajas de Statement y PreparedStatement


El mismo punto: ambos se usan para ejecutar sentencias SQL

La diferencia: PreparedStatement debe crearse de acuerdo con la instrucción SQL. Puede especificar el valor correspondiente configurando parámetros, en lugar de usar el empalme de cadenas como Declaración.

Ventajas de las declaraciones preparadas

        1. Utiliza configuraciones de parámetros con buena legibilidad y no es fácil de recordar incorrectamente. El uso de la concatenación de cadenas en la declaración es menos legible y fácil de mantener.

        2. Tiene un mecanismo de precompilación y su rendimiento es más rápido que una declaración.

        3. Puede prevenir eficazmente los ataques de inyección SQL.

La diferencia entre ejecutar y ejecutar Actualizar


El mismo punto: Ambos pueden realizar operaciones como agregar, eliminar y modificar.

Diferencias: 1. ejecutar puede ejecutar la declaración de consulta y luego obtener el resultado a través de getResult. executeUpdate no puede ejecutar la declaración de consulta; 2. ejecutar devuelve el tipo booleano, verdadero significa que se ejecuta la declaración de consulta y falso significa que se ejecutan las funciones de inserción, eliminación, actualización, etc. El valor de retorno de executeUpdate es int, lo que indica cuántos datos se han visto afectados.

        

Este es el final de la introducción básica a JDBC. Bienvenido a discutir en el área de comentarios.

Supongo que te gusta

Origin blog.csdn.net/qq_43500084/article/details/127678124
Recomendado
Clasificación