继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【备战春招】第15天 Java与数据库连接的桥梁(JDBC第四部分)

谦瑞
关注TA
已关注
手记 78
粉丝 8
获赞 8
课程名称: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连接池。
图片描述

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP