JDBC连接数据库(一)

1 JDBC概述

jdbc(java数据库连接),由数据厂商提供java连接远程数据的库(又称为连接数据库的驱动)。

由应用程序通过JDBC发送SQL,通过数据库连接的驱动提交给数据库实例,从而操作数据库。

2 JDBC工作流

2.1 创建maven项目,并添加jdbc依赖库,修改pom.xml文件

<dependencies>
       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <version>8.0.21</version>
       </dependency>
   </dependencies>

2.2 JDBC API

mysql8加载驱动代码:

Class.forName("com.mysql.cj.jdbc.Driver");
  • java.sql.Connection接口

作用:连接指定数据库;

通过驱动管理器获取连接mysql8的Connection对象代码:

Connection con=DriverManager.getConnection("jdbc:mysql://192.168.1.138:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT","root","123456");

注意:成功返回的Connection对象时,应用程序端得到该连接对象,对应数据库端的一个唯一连接;JDBC操作中连接数据的比较耗时;虽然连接数据库比较耗时,但是B/S项目连接客户端比较多,所以针对一个客户端操作完成后必须关闭当前连接;

针对并发连接较多,提出连接池(应用服务器连接池和第三方连接池)解决方案;

返回的连接对象默认管理事务对象,默认在一条sql执行后,自动提交事务;

可以通过设置手工提交事务,通过程序控制事务

//con为连接对象,设置手动提交
con.setAutoCommit(false);
//当数据库执行过程中发生任何异常,则抛出java.sql.SQLException异常,这时可以通过catch块进行处理,并回滚操作
con.rollback();
  • 注意:

当执行批量增删改操作时,不要使用自动提交,通过设置手动提交,提升性能

//在连接成功后,可以将连接对象自动提交事务的方式改为手动提交
con.setAutoCommit(false);
//          3 获取预编译对象
for (int i = 0; i <100000 ; i++) {
    
    
    sql="insert into temp values(null,?)";
    pstm=con.prepareStatement(sql);
    //补全问号对应的值
    pstm.setString(1,"冬天");
    //4 执行增删改,返回影响的行数
    int re=pstm.executeUpdate();

    //对于手工提交事务操作,在执行增删改之后
    if(i!=0&&i%100==0){
    
    
        con.commit();
        System.out.println(i);
    }
}
  • Statement和PreparedStatement

这两个接口的关系为PreparedStatement接口继承了Statement接口,Statement执行sql语句时要求sql语句必须是完整的;

对于应用程序接收客户端发送请求数据而组成的sql有可能形成sql注入,为了保障操作数据的安全性,使用PreparedStatement接口处理预编译sql语句,该sql中使用?占位提供输入值;

代码:

// 获取预编译对象
sql="insert into temp values(null,?)";
pstm=con.prepareStatement(sql);
//补全问号对应的值
pstm.setString(1,"你好");
  • 对于预编译对象可以执行查询或修改(增删改)操作

在编程中对于增删改查也称为CRUD(crud是指在做计算处理时的增加(Create)、检索(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。)

JDBC中预编译对象(PreparedStatement)将执行增删改对应一个方法,返回修改成功的行数

int re=pstm.executeUpdate();

预编译对象(PreparedStatement)将执行查询操作,可以返回ResultSet对象和ResultSetMetaData(结果集的元数据对象)

  • ResultSet对象

该对象对应查询结果集合,以游标读取记录行的方式进行行处理;

主要API:

ResultSet rs=pstm.executeQuery();
while(rs.next()){
    
    
    ...//针对当前行记录按列处理
        Object b=rs.getObject(列的序号或字符串形式列名);
    int c=rs.getInt(列的序号或字符串形式列名);
}

猜你喜欢

转载自blog.csdn.net/weixin_44787979/article/details/114001435
今日推荐