JDBC
java database connectivity
提供java连接数据库的一套规范。
使用JDBC连接数据库的步骤
-
选择数据库:注册驱动程序 DriverManager类
Driver(mysql)
OracleDriver(oracle) -
建立连接:返回Connection
-
获取发送sql语句的载体:Statement,PreparedStatement,CallableStatement(操作存储过程和函数的)
-
发送sql语句:
ddl(数据定义语句): create、alter、drop
dml(数据操纵语句): insert、update、delete 直接操作数据库的数据
dql(数据查询语句): select 返回值executeQuery():返回ResultSet
executeUpdate():返回int -
处理结果集:ResultSet
next()
getXX(index/name) index从1开始 -
关闭连接 close()
1. Statement
2. 预置语句:PreparedStatement
statement对象有一些需要调整的缺点
- 写sql语句容易写错
- 多次操作一组类型的sql语句,效率较低
- sql语句是拼接的,容易产生sql注入。
则使用PreparedStatement会更好。
查:
增:
改:
删:
3. 读取配置文件
4. 批处理
- 设置批处理:pstmt.addBatch();
- 执行批处理:pstmt.executeBatch();
5. 事务
-
事务的特性:ACID
- 原子性(Atomicity):事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行
- 一致性(Consistency):事务在完成时,必须使所有的数据都保持一致状态
- 隔离性(Isolation):由并发事务所作的修改必须与任何其它并发事务所作的修改隔离
- 持久性(Durability):事务完成之后,它对于系统的影响是永久性的
-
默认把 一条sql 语句作为一个事务。
setAutoCommit(true); -
设置把 多条sql 语句作为一个事务:
try{
setAutoCommit(false); //false 不自动提交
update…
int i=9/0; // 发生异常,则回滚
update…
commit(); // 提交
}catch(){
rollback(); // 回滚
}
6. 调用存储过程、函数
7. 数据库连接池
数据库连接池是一个集合,集合中存放着conn对象
7.1 DBCP
- 初始化连接
dataSource.initialSize=10 - 最大空闲连接
dataSource.maxIdle=20 - 最小空闲连接
dataSource.minIdle=5 - 最大连接数量
dataSource.maxActive=50 - 超时等待时间,以毫秒为单位
dataSource.maxWait=1000
dbcp-config.properties
DBCPUtil.java
7.2 C3P0
c3p0配置文件自动解析完成
- 如果池中数据连接不够时一次增长多少个
< property name=“acquireIncrement”>5< /property> - 初始化数据库连接池时连接的数量
< property name=“initialPoolSize”>20< /property> - 数据库连接池中的最大的数据库连接数
< property name=“maxPoolSize”>25< /property> - 数据库连接池中的最小的数据库连接数
< property name=“minPoolSize”>5< /property>
c3p0-config.xml
C3P0Util.java