Java之Jdbc使用详解( 最新!)

**

一、相关概念

**

1.什么是JDBC

JDBC(数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

2.数据库驱动

我们安装好数据库之后,我们的应用程序也是不能直接使用数据库的,必须要通过相应的数据库驱动程序,通过驱动程序去和数据库打交道。其实也就是数据库厂商的JDBC接口实现,即对Connection等接口的实现类的jar文件。

3、创建驱动
MySql驱动:Class.forName(“com.mysql.jdbc.Driver”);
4、JAVA使用JDBC访问数据库的步骤:

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

5、常用方法:

  • createStatement():创建向数据库发送sql的statement对象。
  • Statement(sql) :创建向数据库发送预编译sql的Satement对象。
  • prepareCall(sql):创建执行存储过程的callableStatement对象。

操作代码如下:

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();
    }

封装使其代码在后面运用的时候更简单

查询封装(反射机制)

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;
   }
}

还有一种封装方法,不需要用到反射
在这里插入图片描述
关闭资源
关闭资源
二次封装:
将查询和增删改封装起来

猜你喜欢

转载自blog.csdn.net/2201_75506216/article/details/131645207
今日推荐