JDBC的运用

本文详细介绍JDBC的基本概念和使用步骤,包括加载驱动、创建连接、执行SQL语句及结果集处理,涵盖PreparedStatement和ResultSet等核心API,适用于Java数据库操作的学习与实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDBC使用

基本概念

java 数据库连接, 是java提供的一套api接口,以一种一致的方式,访问不同的数据库(mysql,oracle,sqlserver)

java.sql.*
java.sql.Driver 驱动(如何连接数据库)
java.sql.Connection 连接(代表java程序和数据库之间连接通道)
java.sql.Statement 执行sql语句
java.sql.PreparedStatement
java.sql.CallableStatement
java.sql.ResultSet 结果集 代表的是从数据库查询结果
java.sql.DriverManager 工具类,用来获取Connection
java.sql.SQLException 代表执行sql过程中出现的异常

具体的实现由数据库厂商来提供

MySQL Connector/J 是mysql提供的针对jdbc接口的实现,以jar包方式提供

idea 中加入mysql驱动jar包(每次)

使用步骤

1)加载驱动
2)创建连接,创建Connection对象
3)创建Statement对象
4)执行sql语句,增删改或者查询
5)关闭释放资源,先打开的资源最后关闭

例如 :

 

import java.sql.*;

public class TestJDBC1 {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
//        1) 加载驱动 (在新版的jdbc中可以省略此步骤)只需要执行一次即可
//        Class.forName("com.mysql.jdbc.Driver");     mysql 5.1
        Class.forName("com.mysql.cj.jdbc.Driver"); // mysql 8.8

        //2) 创建连接,创建Connection对象
        // jdbc:mysql: 称为连接协议
        // localhost: mysql服务器的ip地址
        // 3306: 连接端口号
        // test3: 数据库名称
        // serverTimezone=GMT%2B8 设置连接时区与数据库服务器一致 (连接8.0 mysql时新增 )
        String url = "jdbc:mysql://localhost:3306/test3?serverTimezone=GMT%2B8&useSSL=false"; // 数据库的连接字符串
        String username="root"; // 数据库用户名
        String password="root"; // 数据库的密码
        Connection conn = DriverManager.getConnection(url, username, password);

//        3) 创建Statement 对象
        Statement stmt = conn.createStatement();

//        4) 执行sql语句(执行增删改或查询)
/*        stmt.executeUpdate(sql) // 用来执行 insert, update, delete
        stmt.executeQuery(sql)  // 用来执行 select
        stmt.execute(sql)  : 可以增删改也可以查询 ,返回boolean类型,false则为增删改,true则为查询
        stmt.execute(sql,Statement.RETURN_GENERATED_KEYS)返回自增的id值


        executeUpdate方法返回的整数,代表增删改影响的记录行数
        int i = stmt.executeUpdate("insert into dept(deptno,dname,loc) values(60, '教学部', '西安'),(70, '市场部', '西安')");
        System.out.println("影响行数是:" +i);	*/

//        结果集对象
        ResultSet rs = stmt.executeQuery("select deptno,dname,loc from dept");
//      rs.next() 返回值是一个boolean 表示是否有下一条记录
        while(rs.next()) {
/*            int deptno = rs.getInt(1);// getXXX方法的参数,代表第几列,从1开始
            String dname = rs.getString(2);
            String loc = rs.getString(3);		*/
            int deptno = rs.getInt("deptno");
            String dname = rs.getString("dname");
            String loc = rs.getString("loc");
            System.out.println(deptno + "\t" + dname + "\t" + loc);
        }

//        5) 关闭释放资源, 先打开的资源最后关闭
        rs.close();
        stmt.close();
        conn.close();

    }
}

重要接口API

ResultSet

1)查询时需要 ,next() 方法
移动到结果集的下一条记录,如果返回true表示有下一条记录,否则返回false

2)getXxx(int 列下表)
用来获取结果集中某一列的数据,其中XXX为数据类型,如果是字符串使用 getString 如果是整数,使用getInt ... ,列下标从1开始
getXxx(列名)也可用于获取结果集中某列数据

PreparedStatement

需要SQL语句中的值使用'?'占位符,再通过setXxx方法给'?'赋值
若为整数类型调用setInt(?的下标, 值),下标的值从1开始

异常的处理

为方便起见,最好创建个Utils包,方便直接创建连接,以及快速关闭释放资源
异常处理大致如下 :

 

import java.sql.*;

public class TestJDBC4 {

    public static void aaa(String[] args) {
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            conn = Utils.getConnection();
            stmt = conn.prepareStatement("select * from Student");
            rs = stmt.executeQuery();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            Utils.close(rs, stmt, conn);
        }
    }

    public static void bbb(String[] args) {
        Connection conn = null;
        PreparedStatement stmt = null;
        try {
            conn = Utils.getConnection();
            stmt = conn.prepareStatement("insert * from Student");
            stmt.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            Utils.close(stmt, conn);
        }
    }
}

表格-->对象

创建个类
类名相当于数据库表名
类中属性相当于数据库列名
再通过setXxx()方法和getXxx()方法输入或者输入值,一一对应


例 :

//自定义School类含学生id,姓名,生日和性别等属性,还有set,get方法
//工具包Utils创建连接方法和关闭资源方法
public class TestSchool {
    //查找方法
    public School findById(int sid){
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet rs = null;

        try {
            conn = Utils.getConnection();
            //输入sql语句
            String sql = "select * from student where sid = ?";
            stmt = conn.prepareStatement(sql);
            //给占位符赋值
            stmt.setInt(1,sid);
            //执行语句
            rs = stmt.executeQuery();

            //因为不存在循环,只返回一条语句所以用if
            if(rs.next()){
                //把数据用School保存起来
                School sc = new School();
                sc.setSid(rs.getInt("sid"));
                sc.setSname(rs.getString("sname"));
                sc.setBirthday(rs.getDate("birthday"));
                sc.setSex(rs.getString("sex"));
                return sc;
            }else {
                return null;
            }
        }catch (Exception e){
          throw new RuntimeException();

        }finally {
            Utils.close(rs,stmt,conn);
        }

    }
     public static void main(String[] args) throws ParseException {
      //创建TestSchool对象
        TestSchool ts = new TestSchool();
            School byId = ts.findById(1006);
        System.out.println(byId);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值