[quote]
下载[b] commons-dbcp-1.4-bin.zip
commons-pool-1.5.4.jar[/b]
[b]事务隔离[/b]
JDBC支持的四种事务隔离级别
READ_COMMITTED
写事务执行时,不允许其他事务访问未提交数据
读事务执行时,允许写事务访问数据
READ_UNCOMMITTED
写事务执行时,允许其他事务访问未提交数据
读事务执行时,允许写事务访问数据
REPEATABLE_READ
写事务执行时,不允许其他事务访问未提交数据
读事务执行时,不允许写事务访问数据
SERIALIZABLE
所有的事务排队依次执行
con.setTransactionIsolation()
设置事务隔离
DatabaseMetadata.getDefaultTransactionIsolation();
默认隔离级别
DatabaseMetadata.supportsTransactionIsolationLevel(int level)
是否支持指定隔离级别
[b]
事务锁定[/b]
[b]悲观锁[/b]
认为肯定会发生数据访问冲突
访问数据时,将数据锁定,其他事务不能写数据
数据库实现悲观锁
oracle: select * from emp for update
[b]乐观锁[/b]
认为不一定会发生数据访问冲突
在数据表中增加字段version
每次修改数据之前比较版本号,
如果版本修改冲突,由用户决定如何操作
编程实现
hibernate 内置乐观锁支持
[b]批处理[/b]
Statement
在本地缓存sql语句
addBatch(sql)
执行一批语句
executeBatch()
PrepareStatement
pstmt.setString(1,"a")
addBatch()
pstmt.setString(1,"b")
addBatch()
[b]分页查询[/b]
1, 可滚动的结果集
每页10条
定位到0,next()10次 第一页
定位到100,next()10次 第十页
2, 数据库扩展sql
oracle分页rownum
select * from
(select t.*, rownum r
(select * from s_emp) t)
where r >=? and r<=?
mysql分页limit
select * from s_emp limit 20, 10
limit 起始行, 每页条数
起始行从0开始
sqlserver分页top
select * from s_emp top 50
取前50条数据,
如果每页10条,滚动到第41条,取10条数据
[b]大对象[/b]
lob - large object
blob - byte
clob - charactor
SQL> create table gallery (
2 id number(8) primary key,
3 pic blob
4 )
5 /
blob - oracle中可保存4G数据
mysql -
blob - 255
tinyBlob - 64k
me..Blob - 16M
longBlob - 4G
[b]
自动主键的获取[/b]
insert into s_emp(name) value('asdf')
插入的数据主键id由数据库自动生成
获得刚插入的主键值
stmt.executeUpdate(sql);
ResultSet rs =
stmt.getGeneratedKeys();
rs.next();
int id = rs.getInt(1);
[b]连接池[/b]
数据库操作必须使用连接池
DBCP apache
tomcat使用该连接池
proxool 性能更高
c3p0
hibernate中使用这两个连接池
[/quote]
下载[b] commons-dbcp-1.4-bin.zip
commons-pool-1.5.4.jar[/b]
[b]事务隔离[/b]
JDBC支持的四种事务隔离级别
READ_COMMITTED
写事务执行时,不允许其他事务访问未提交数据
读事务执行时,允许写事务访问数据
READ_UNCOMMITTED
写事务执行时,允许其他事务访问未提交数据
读事务执行时,允许写事务访问数据
REPEATABLE_READ
写事务执行时,不允许其他事务访问未提交数据
读事务执行时,不允许写事务访问数据
SERIALIZABLE
所有的事务排队依次执行
con.setTransactionIsolation()
设置事务隔离
DatabaseMetadata.getDefaultTransactionIsolation();
默认隔离级别
DatabaseMetadata.supportsTransactionIsolationLevel(int level)
是否支持指定隔离级别
[b]
事务锁定[/b]
[b]悲观锁[/b]
认为肯定会发生数据访问冲突
访问数据时,将数据锁定,其他事务不能写数据
数据库实现悲观锁
oracle: select * from emp for update
[b]乐观锁[/b]
认为不一定会发生数据访问冲突
在数据表中增加字段version
每次修改数据之前比较版本号,
如果版本修改冲突,由用户决定如何操作
编程实现
hibernate 内置乐观锁支持
[b]批处理[/b]
Statement
在本地缓存sql语句
addBatch(sql)
执行一批语句
executeBatch()
PrepareStatement
pstmt.setString(1,"a")
addBatch()
pstmt.setString(1,"b")
addBatch()
[b]分页查询[/b]
1, 可滚动的结果集
每页10条
定位到0,next()10次 第一页
定位到100,next()10次 第十页
2, 数据库扩展sql
oracle分页rownum
select * from
(select t.*, rownum r
(select * from s_emp) t)
where r >=? and r<=?
mysql分页limit
select * from s_emp limit 20, 10
limit 起始行, 每页条数
起始行从0开始
sqlserver分页top
select * from s_emp top 50
取前50条数据,
如果每页10条,滚动到第41条,取10条数据
[b]大对象[/b]
lob - large object
blob - byte
clob - charactor
SQL> create table gallery (
2 id number(8) primary key,
3 pic blob
4 )
5 /
blob - oracle中可保存4G数据
mysql -
blob - 255
tinyBlob - 64k
me..Blob - 16M
longBlob - 4G
[b]
自动主键的获取[/b]
insert into s_emp(name) value('asdf')
插入的数据主键id由数据库自动生成
获得刚插入的主键值
stmt.executeUpdate(sql);
ResultSet rs =
stmt.getGeneratedKeys();
rs.next();
int id = rs.getInt(1);
[b]连接池[/b]
数据库操作必须使用连接池
DBCP apache
tomcat使用该连接池
proxool 性能更高
c3p0
hibernate中使用这两个连接池
[/quote]