JDBC技术

目录

一、JDBC概述

1.引言

2.JDBC概述

3.使用JDBC

4.JDBC操作步骤

二、JDBC应用案例

1.DML操作

2.DQL操作

3.整理报错异常

三、综合案例

1.创建表

2.实现登录

3.登录应用


一、JDBC概述

1.引言

前面的操作,不管是通过DOS还是navicat操作数据库,都是特别麻烦的,特别频繁的复制型的操作

如果使用java代码(软件)去操作数据库,则只需要触发一个指令,内部即可联动性的循环操作SQL语句

2.JDBC概述

什么是JDBC? JDBC其实就是通过java代码操作数据库的一种规范和标准

只需要数据库产品提供相关的驱动,java代码就可以连接上数据库,从而通过java代码操作数据库

3.使用JDBC

先将驱动放入项目中,添加到库,即可使用驱动

mysql的驱动选择: mysql-connector-java-8.0.X 适用于 8.X版本

编写JDBC操作步骤

4.JDBC操作步骤

1.加载驱动

2.获取连接对象

3.创建执行对象

4.执行SQL语句

5.返回结果 查询则返回结果集 DML则返回影响条数

6.关闭数据库

二、JDBC应用案例

1.DML操作

//案例:增删改t_jobs数据
Connection conn = null;
Statement st = null;
try {
    //1.加载驱动
    Class.forName("com.mysql.cj.jdbc.Driver");
    //2.通过驱动管理器获取连接对象
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb1?serverTimezone=UTC", "root", "123");
    //3.创建执行对象
    st = conn.createStatement();
    //添加
    //String sql = "insert into t_jobs values('MY_IT','IT_1',10000,25000)";
    //修改
    //String sql = "update t_jobs set min_salary=20000 where job_id='MY_IT'";
    //删除
    String sql = "delete from t_jobs where job_id='IT_PROG'";
    //4.执行SQL操作   5.返回影响条数
    int res = st.executeUpdate(sql);
    System.out.println("执行update:"+res);
}catch (Exception e){
    e.printStackTrace();
}finally {
    //关闭数据库的接口为AutoCloseable
    DBUtils.closeAll(st,conn);  //统一资源关闭
}

统一数据库资源关闭   AutoCloseable...ac(资源类型的可变长参数,用于关闭未知数量的资源)

public static void closeAll(AutoCloseable...ac){
    for(AutoCloseable a:ac){
        if(a!=null){
            try {
                a.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

2.DQL操作

//案例:查询t_jobs数据
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try {
    //1.加载驱动
    Class.forName("com.mysql.cj.jdbc.Driver");
    //2.通过驱动管理器获取连接对象
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb1?serverTimezone=UTC", "root", "123");
    //3.创建执行对象
    st = conn.createStatement();
    String sql = "select * from t_jobs";
    rs = st.executeQuery(sql); //返回结果集--存储记录的集合
    while(rs.next()){ //结果集遍历--类似迭代器操作
        //参数为字段的字符串; 当获取聚合函数值,可使用整数标记
        String job_id = rs.getString("job_id");
        String job_title = rs.getString("job_title");
        String min_salary = rs.getString("min_salary"); //alt+enter
        String max_salary = rs.getString("max_salary");
        System.out.println(job_id+"--"+job_title+"--"+min_salary+"--"+max_salary);
    }
}catch (Exception e){
    e.printStackTrace();
}finally {
    //关闭数据库的接口为AutoCloseable
    DBUtils.closeAll(rs,st,conn);  //统一资源关闭
}

3.整理报错异常

  1. 主键约束失败-重复添加主键值(常见) Duplicate entry 'MY_IT' for key 't_jobs.PRIMARY'

  2. 没到驱动包或驱动名写错(常见) ClassNotFoundException: com.mysql.cj.jdbc.Driv

  3. url写错了 SQLException: No suitable driver found for jdbc:my://...

  4. 用户名或密码写错 SQLException: Access denied for user 'root'@'localhost'

  5. 数据库名写错了 SQLSyntaxErrorException: Unknown database '666'

  6. sql语句异常(常见) SQLSyntaxErrorException: You have an error in your SQL syntax

  7. 获取的字段名写错 SQLException: Column 'job_i' not found

三、综合案例

1.创建表

  • 创建一张用户表 User

    • id ,主键、自动增长。

    • 用户名,字符串类型,唯一、非空

    • 密码,字符串类型,非空

    • 手机号码,字符串类型

  • 插入 2 条测试语句

2.实现登录

  • 通过控制台用户输入用户名和密码。

  • 用户输入的用户名和密码作为条件,编写查询 SQL 语句。

  • 如果该用户存在,提示登录成功,反之提示失败。

3.登录应用

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.print("请输入用户名:");
    //next则字符串空格则结束  nextLine允许有空格,例如“zs f”是一个用户名
    String username = sc.nextLine();
    System.out.print("请输入密码:");
    String password = sc.nextLine();
    if(login(username,password)){ //调用登录功能
        System.out.println("登录成功~~!");
    }else{
        System.out.println("登录失败~~!");
    }
}
private static boolean login(String username, String password) {
    Connection conn = null;
    Statement  st   = null;
    ResultSet  rs   = null;
    try {
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.通过驱动管理器获取连接对象
        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb1?serverTimezone=UTC", "root", "123");
        //3.创建执行对象
        st = conn.createStatement();
        String sql = "select count(*) from user where username='"+username+"' and password='"+password+"'";
        rs = st.executeQuery(sql);
        if(rs.next()){
            //rs.getInt(1):获取第一个字段 count(*)字段   聚合函数:0或大于0
            return rs.getInt(1)>0;
        }
    }catch (Exception e){
        e.printStackTrace();
    }finally {
        DBUtils.closeAll(rs,st,conn);
    }
    return false;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值