Detailed explanation of the use of Jdbc in Java (latest!)

**

1. Related concepts

**

1. What is JDBC

JDBC (database connection) is a Java API for executing SQL statements, which can provide unified access to various relational databases. It consists of a set of classes and interfaces written in the Java language. JDBC provides a baseline from which higher-level tools and interfaces can be built to enable database developers to write database applications.

2. Database driver

After we have installed the database, our application cannot directly use the database. It must use the corresponding database driver to deal with the database through the driver. In fact, it is the JDBC interface implementation of the database manufacturer, that is, the jar file of the implementation class of the Connection and other interfaces.

3. Create the driver
MySql driver: Class.forName(“com.mysql.jdbc.Driver”);
4. Steps for JAVA to use JDBC to access the database:

  1. 得到数据库驱动程序
    
  2. 创建数据库连接
    
  3. 执行SQL语句
    
  4. 得到结果集
    
  5. 对结果集做相应的处理(增,删,改,查)
    
  6. 关闭资源:这里释放的是DB中的资源
    

5. Common methods:

  • createStatement(): Create a statement object that sends sql to the database.
  • Statement(sql): Create a Statement object that sends precompiled sql to the database.
  • prepareCall(sql): Create a callableStatement object that executes the stored procedure.

The operation code is as follows:

private static void f1() throws Exception {
    
    
        //1、注册驱动-反射去加载jar包中com.mysql.jdbc.Driver这个类中的 DriverManager.registerDriver(new Driver());
        Class.forName("com.mysql.jdbc.Driver");
        //2、获取连接对象
        var conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/summer-camp2023?characterEncoding=utf8", "root", "admin");
        System.out.println(conn);
        //3、定义sql
        String sql="insert into t_dept values(null,'乌克兰分部','基辅','陈总')";
        //4、需要创建statement
        var st = conn.createStatement();
        //5、statement 执行sql,返回 插入了几行
        var i = st.executeUpdate(sql);
        System.out.println("向数据库t_dept表中插入了"+i+"行数据");
        //6、关闭资源
        st.close();
        conn.close();
    }

Encapsulation makes the code easier to use later

Query encapsulation (reflection mechanism)

package com.hp.utils;
import java.sql.DriverManager;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

//jdbc工具类
public class JdbcUtil {
    
    
   //查询多行多列
   public static <T> List<T> list(String sql,Class<T> c){
    
    
       //创建一个集合,存放所有的对象
       List<T> tList=new ArrayList<>();
       try {
    
    
           //1、注册驱动-反射去加载jar包中com.mysql.jdbc.Driver这个类中的 DriverManager.registerDriver(new Driver());
           Class.forName("com.mysql.jdbc.Driver");
           //2、获取连接对象
           var conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/summer-camp2023?characterEncoding=utf8", "root", "admin");

           //3、定义sql

           //4、需要创建statement
           var st = conn.createStatement();
           //5、statement 执行sql,返回 结果集
           var rs = st.executeQuery(sql);
           //结果集rs得到结果集元数据
           ResultSetMetaData md=rs.getMetaData();
           //获取结果集总列数
           var columnCount = md.getColumnCount();
           //6、解析rs
           while (rs.next()) {
    
    //rs.next 读取结果集的光标向下移动一行,光标默认在哪一行,列名所在的那一行
               //根据每一行数据,封装成一个实体对象
                T t = c.newInstance();
               // 1、取出某一行的每个数据,封装到对象t的属性中
               for (int i = 1; i <= columnCount; i++) {
    
    
                   //通过列的序号,获取每一列的值
                   var value = rs.getObject(i);
                   if (value!=null){
    
    
                       //通过列的序号,获取每一列的列名
                       var columnName = md.getColumnName(i);
                       //因为列名和实体类t中的属性名一致,为每一个属性构造一个反射中的set方法
                       var f = c.getDeclaredField(columnName);
                       //赋予私有属性的赋值权限
                       f.setAccessible(true);
                       //使用反射,把value给到对象t的属性中
                       f.set(t,value);//理解为:把value赋值给对象t的ColumName,相当于set方法
                   }
               }
               //把对象存入集合中
               tList.add(t);
           }
           //7、关闭资源
           st.close();
           conn.close();
       } catch (Exception e) {
    
    
           e.printStackTrace();
       }
       return tList;
   }
}

There is another encapsulation method that does not need to use reflection
insert image description here
to close resource
close resource
secondary encapsulation:
Encapsulate queries and additions, deletions, and modifications

Guess you like

Origin blog.csdn.net/2201_75506216/article/details/131645207