课程名称:Java工程师2022版
课程章节:Java与数据库连接的桥梁
课程讲师:IT老齐 悟空 八戒猪 神思者 Leo
课程内容:JDBC第四部分
一、JDBC的日期处理以及批量处理
1.JDBC中Date日期对象处理。
在JDBC中设计表的时候不管选择的类型是date还是datetime都是同样的返回结果,也不会有任何的差异,但是如果只是在数据库中的话,date只保留到天这个单位,但是datetime是保留到秒。
在getDate下返回的Date是java.sql下的Date对象。
JDBC获取日期使用java.sql.Date,其继承自java.util.Date,所以在进行数据提取的时候两者互相兼容。
2.JDBC数据批处理
做了批处理数据和传统处理数据做了对比。
package com.imooc.jdbc.sample;
import com.imooc.jdbc.common.DbUtils;
import java.sql.*;
import java.util.Date;
/**
* 使用批处理
*/
public class BatchSample {
//标准方式插入若干数据
private static void tc1() {
Connection conn = null;
PreparedStatement pstmt = null;
try {
long startTime = new Date().getTime();
conn = DbUtils.getConnection();
//默认使用自动提交模式
conn.setAutoCommit(false); //关闭自动提交
String sql = "insert into employee(eno,ename,salary,dname) values(?,?,?,?)";
for (int i = 100000; i < 200000; i++) {
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, i);
pstmt.setString(2, "员工" + i);
pstmt.setFloat(3, 4000f);
pstmt.setString(4, "市场部");
pstmt.executeUpdate();
}
conn.commit(); //提交数据
long endTime = new Date().getTime();
System.out.println("tc1()执行时长:" + (endTime - startTime));
} catch (Exception e) {
e.printStackTrace();
try {
if (conn != null && !conn.isClosed()) {
conn.rollback();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
} finally {
DbUtils.closeConnection(null, pstmt, conn);
}
}
//使用批处理处理若干数据
private static void tc2() {
Connection conn = null;
PreparedStatement pstmt = null;
try {
long startTime = new Date().getTime();
conn = DbUtils.getConnection();
//默认使用自动提交模式
conn.setAutoCommit(false); //关闭自动提交
String sql = "insert into employee(eno,ename,salary,dname) values(?,?,?,?)";
pstmt = conn.prepareStatement(sql);
for (int i = 200000; i < 300000; i++) {
pstmt.setInt(1, i);
pstmt.setString(2, "员工" + i);
pstmt.setFloat(3, 4000f);
pstmt.setString(4, "市场部");
pstmt.addBatch(); //将参数加入批处理任务
}
pstmt.executeBatch(); //执行批处理任务
conn.commit(); //提交数据
long endTime = new Date().getTime();
System.out.println("tc2()执行时长:" + (endTime - startTime));
} catch (Exception e) {
e.printStackTrace();
try {
if (conn != null && !conn.isClosed()) {
conn.rollback();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
} finally {
DbUtils.closeConnection(null, pstmt, conn);
}
}
public static void main(String[] args) {
tc1();
tc2();
}
}
批处理和传统方法相比,一次性操作10万级别以上的数据时,应该选择批处理的方法,因为这样的方法时间成本更低。
二、Druid&c3p0连接池
1.Druid连接池
Druid是阿里巴巴开源连接池组件,是最好的连接池之一。
Druid对数据库连接进行有效管理与重用,最大化程序执行效率。
连接池负责创建管理连接,程序只负责取用与归还。
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/imooc?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
username=root
password=1314520Gx
新建配置文件,把JDBC相关的属性和操作放进配置文件,然后在整个程序发布后,配置文件也会被发布,从逻辑上极大的简化,有助于我们写代码。
课程总结:
完成了今天的学习目标:
1.JDBC的日期处理以及批量处理。
2.Druid&c3p0连接池。