JDBC使用

这篇博客详细介绍了JDBC的使用,包括JDBC的介绍、Mysql-connector的配置、数据库连接、Statement与PreparedStatement的使用、Resultset操作、批处理、事务处理以及CLOB大对象的使用。通过实例展示了JDBC操作数据库的过程,还探讨了事务管理和封装JDBC的实用技巧。
摘要由CSDN通过智能技术生成

渣渣用惯了框架回头来学习JDBC了,毕竟还是要知其然知其所以然。

JDBC介绍

JDBC是以统一方式访问数据库的API,无论实际使用的是Mysql数据库还是Oracle数据库,加入的数据库Jar包后,用户只需操作统一的JDBC即可。
在这里插入图片描述

配置Mysql-connector的Jar包

1)下载Jar包

先在网址https://dev.mysql.com/downloads/connector/j/下载Mysql的Jar包。由于我的mysql数据库是8.0版本的,所以驱动也下载8.0版本的,旧版本的数据库最好对应下载旧版本的驱动。
在这里插入图片描述
将下载下来的zip压缩包解压,可发现压缩包中有mysql-connector-java-8.0.20.jar包。
在这里插入图片描述

2)集成到IDEA

在idea项目中选择File——ProjectStruct——Modules——Dependencies,选择+号,选择Jars or directors。
在这里插入图片描述
选择解压路径下的jar包
在这里插入图片描述
于是Jar包添加成功,在External Libraries中可看见
在这里插入图片描述

JDBC运用

1. 数据库连接,statement语句和prepared

(1)先创建一个名叫jdbc_test的数据库,再建立一张名为t_user的表,在其中设三个字段:id,username,lasttime。
在这里插入图片描述
(2)编写Java程序,一定要注意此处的url,不要写错

public class Demo {
   
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
   
        // 加载相应的驱动
        Class.forName("com.mysql.cj.jdbc.Driver");

        String url = "jdbc:mysql://localhost:3306/jdbc_test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai;
        String username = "root";
        String password = "root";
        // 建立数据库连接,远程连接中包含socket对象,比较耗时,实际开发中常用连接池
        Connection  connection = DriverManager.getConnection(url,username,password);

        // statement语句容易发生sql注入危险,不建议使用
        Statement statement = connection.createStatement();
        String sql = "insert into t_user values(1,'zd',now())";
        statement.execute(sql);  

		// 后开的先关
        statement.close();
        connection.close();
    }
}

运行结果:
在这里插入图片描述
(3)sql注入示例,删库

public class Demo {
   
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
   
        // 加载相应的驱动
        Class.forName("com.mysql.cj.jdbc.Driver");

        String url = "jdbc:mysql://localhost:3306/jdbc_test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai";
        String username = "root";
        String password = "root";
        // 建立数据库连接,远程连接中包含socket对象,比较耗时,实际开发中常用连接池
        Connection  connection = DriverManager.getConnection(url,username,password);

        // statement语句容易发生sql注入危险,不建议使用
        Statement statement = connection.createStatement();

        String id = "1 or 1=1";
        String sql = "delete from t_user where id=" + id;
        statement.execute(sql);

        statement.close();
        connection.close();
    }
}

由于id通常是外部传进来的,此时运行这个sql语句相当于直接删库了,非常不安全。
(4)预编译preparestatement语句的使用

public class Demo {
   
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
   
        // 加载相应的驱动
        Class.forName("com.mysql.cj.jdbc.Driver");

        String url = "jdbc:mysql://localhost:3306/jdbc_test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai";
        String username = "root";
        String password = "root";
        Connection  connection = DriverManager.getConnection(url,username,password);

        // 采用?占位符
        String sql = "insert into t_user values(?,?,?)";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        // 设置参数,从1开始,不是从0开始,每个参数设置有对应的类型
        preparedStatement.setInt(1,1);
        preparedStatement.setString(2,"wy");
        preparedStatement.setTimestamp(3,new Timestamp(System.currentTimeMillis()));
       
        preparedStatement.execute();
        
        preparedStatement.close();
        connection.close();
    }
}

结果展示:
在这里插入图片描述

resultset结果集的使用

假设数据库有多条记录:
在这里插入图片描述
使用ResultSet来保存查询得到的记录:

public class Demo {
   
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
   

        Class.forName("com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值