10 JDBC
10.1 JDBC
程序会通过数据库驱动和数据库打交道
SUN公司为了简化开发人员的(对数据库的统一)操作,提供了一个(Java操作数据库的)规范,俗称JDBC
这些规范的实现由具体的厂商去做
对于开发人员来说,只需要掌握JDBC接口的操作即可
需要的包:
java.sql
javax.sql
还有一个数据库驱动包 mysql-connector-java-5.1.47.jar
10.2 JDBC项目
创建测试数据库
- 创建一个普通项目
- 导入数据库驱动(新建lib,将驱动移进去,然后右击lib)
- 编写测试代码
步骤总结:
- 加载驱动
- 连接数据库 DriverManger
- 获得返回的结果集
- 释放连接
URL
String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true";
//mysql -- 3306
// 协议://主机地址:端口号/数据库名?参数1&参数2&参数3
Statement 执行SQL的对象 PrepareStatement
statement.executeQuery(); 查询操作返回ResultSet
statement.execute(); // 执行任何SQL
statement.executeUpdate(); //更新、插入、删除。 都是用这个,返回一个受影响的行数
ResultSet 查询的结果集:封装了所有的查询结果
获得指定的数据类型
在不知道列类型的情况下 用:
resultSet。getObject();
如果知道列的类型就是用指定的类型,比如:
resultSet。getInt();
遍历,指针
resultSet.beforeFirst(); //移动到最前面
resultSet。afterLast(): //移动到最后面
。。。. next(); 移动到下一个数据
。previous(); 移动到前一行
。absolute(row)移动到指定行
释放资源
resultSet.close();
statement.close();
connection.close();
10.3 statement对象
jdbc中的statement对象用于想数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可
增删改都是一样的格式,都用的executeUpdate,只是sql语句不同
改则不一样虽然也可以用executeUpdate,但是效率会低,所以用executeQuery
将固定的步骤提取工具类,之后再编写会简化很多:
删除:
查询:
10.4 preparedStatement对象
PreparedStatement 可以防止SQL注入,效率更高好。
插入:
删除:
更改:
查询;
防止SQL注入:
10.4 事务
- 开启事务 conn.setAutoCommit(false);
- 一组业务执行完毕,提交事务
- 可以在catch语句中显示的定义 回滚语句,但默认失败就会回滚
代码:
10.5 数据库连接池
数据库连接–执行完毕–释放
连接–释放 十分浪费系统资源
池化技术:准备一些预先的资源,过来就连接预先准备好的
最小连接数
最大连接数
等待超时
编写连接池,实现一个接口 DataSource
开源数据源实现(拿来即用)
DBCP
C3P0
Druid:阿里巴巴
使用这些数据库连接池之后,我们在项目开发中就不需要编写连接数据库的代码了!
DBCP
需要的jar包:
commons-dbcp-1.4、commons-pool-1.6
C3P0
c3p0-0.9.55、mchange-commons-java-0.2.19
结论
无论使用什么数据源,结论还是一样的,DataSource接口不会变,方法就不会变