JDBC与事务控制


下面是JDBC知识点整理

***:
在这里插入图片描述
其中要注意:
1、JDBC的驱动就是一个连接工厂吗,生成的产品是连接对象
com.mysql.jdbc.Driver 是Driver的mysql实现类
oracle.jdbc.Driver 是Driver的oracle实现类

   Class.forName("驱动类名");
   例如:
   Class.forName("com.mysql.jdbc.Driver");

另外,JDBC版本在3.0以上都可以省略这步
2、获取连接对象
内部调用 Driver 对象获取数据库连接

   DriverManager.getConnection(url, 用户名, 密码);  

url 的格式 :

jdbc:mysql://ip地址:端口号/数据库名?参数

例如:mysql数据库

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");

3、创建语句

Statement stmt = conn.createStatement();

4、 执行sql
用来执行 insert , update, delete , DDL , 返回值代表影响行数:

int rows = stmt.executeUpdate(); 

用来执行 select:

ResultSet rs = stmt.executeQuery();  

boolean moreRows = rs.next() 取得下一条记录,
moreRows 是true ,表示有下一条记录, false 表示没有了

while(rs.next()) {
}

PreparedStatement 预编译语句对象知识点框图


在这里插入图片描述
模板代码:

Statement stmt = conn.createStatement();
stmt.executeUpdate(String sql);
PreparedStatement psmt = conn.prepareStatement(String sql);
insert into student(sid,sname,birthday,sex) values(null, ?, ?, ?)
使用PreparedStatement中一系列以 set开头的方法
setString(?的位置,)
setInt(?的位置,)
setDate(?的位置,)

psmt.setString(1, "李四");
psmt.setString(2, "1999-9-7");
psmt.executeUpdate();

注意: ?能够占位的只有值, 不能是表名、列名、关键字


事务控制


在这里插入图片描述
让事务变为手动提交:

try {
    Connection.setAutoCommit(false);
    // 执行多条sql 接下来,事务会在执行第一条 insert, update, delete 时 开始

    // 提交事务
    Connection.commit();
} catch(Exception e ) {
    // 回滚事务
    Connection.rollback();
}

批处理

try(Connection conn = JdbcUtils.getConnection()) {
    PreparedStatement psmt = conn.prepareStatement("insert into big(name) values(?)");
    long start = System.currentTimeMillis();
    for (int i = 1; i <= 100001; i++) {
        psmt.setString(1, "张" +i);
        psmt.addBatch(); // 10001 10002 .... ... 19999 20000
        if(i % 10000 == 0) {
            psmt.executeBatch(); // 发送给服务器并清空批处理包
        }
    }
    psmt.executeBatch(); // 收尾的
    long end = System.currentTimeMillis();
    System.out.println("共花费了:" +(end-start)+"毫秒");
} catch (SQLException e) {
    e.printStackTrace();
}

javax.sql.DataSource 连接池接口
Conneciton conn = datasource.getConnection(); 从池中返回连接对象

conn.close(); // 一般都覆盖了关闭方法,将连接归还给连接池,而不是真正关闭

  • 用DriverManager 获取连接,称为直连
  • 用DataSource 获取连接,称为池连
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/test");
dataSource.setUsername("root");
dataSource.setPassword("root");

//        dataSource.setDriverClassName("com.mysql.jdbc.Driver"); 可选步骤,注册驱动
dataSource.setInitialSize(5); // 初始连接数
dataSource.setMaxActive(10); // 最大连接数
dataSource.setMinIdle(5);    // 最小连接数
dataSource.setValidationQuery("select 1"); // 一条简单的sql语句,用来保活
dataSource.setTestWhileIdle(true); // 当空闲时时不时检查一下连接的有效性, 利用ValidationQuery中的sql语句
dataSource.setTimeBetweenEvictionRunsMillis(60*1000); // 默认一分钟

try(Connection conn = dataSource.getConnection()){

    // conn.close();// 归还连接池了
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值