简单介绍jsp数据库操作的3个小技巧:数据排序,主/从表处理,事务处理。
1 数据排序
在数据库技术中,可以使用order子句对查询结果进行排序
[ order by { order_by_exdivssion[ asc | desc]} [ ¸…n ] ]
其中,order_by_exdivssion用来指定要排序的列;asc指定按递增顺序排列;desc指定按递减顺序排序。
class.forname( "com.microsoft.jdbc.sqlserver.sqlserverdriver" ).new instance( );
string url="jdbc:microsoft:sqlserver://localhost:1433;databasename=pubs";
string user="dxaw";
string password="123";
connection conn=drivermanager.getconnection( url, user, password );
statement st=conn.createstatement( resultset.type_scroll_sensitive,
resultset.concur_updatable );
string sql="select * from tbl order by id desc";
resultset rs=st.executequery( sql );
while( rs.next )...{
out.println( rs.getstring( "..." ) );
}
rs.close( );
st.close( );
conn.close( );
|
2 主/从表处理
实现主从表查询主要通过in子句和exists子句为实现。
in子句是通过in(或not in)连接起来的一种检索数据的方法,其返回的结果集中可以包含零个或者多个值。
exists子句是通过exists(或not exists)连接起来的一种检索数据的方法,它的功能是判断子查询的结果集中是否有数据行返回,返回true或false,而不返回其他的实际数据。由于不需要在这种子查询中返回具体值,这种子查询的选择列表经常使用“select *”格式,其外层的where子句也不需要指定列名。
select au_id, au_name form authors where au_id in (
select au_id form titleauthor where title_id in (
select title_id form titles where type="business"
)
)
|
3 事务处理
事务是现代数据库理论中的核心概念之一。如果一组处理步骤或者全部发生或者一步也不执行,我们称该组处理步骤为一个事务。当所有的步骤像一个操作一样被完整地执行,我们称该事务被提交。由于其中的一部分或多步执行失败,导致没有步骤被提交,则事务必须回滚(回到最初的系统状态)。事务必须服从iso/iec所制定的acid原则。acid是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。持久性表示已提交的数据在事务执行失败时,数据的状态都应该正确。
在jdbc中怎样将多个sql语句组合成一个事务呢?在jdbc中,打开一个连接对象connection时,缺省是auto-commit模式,每个sql语句都被当作一个事务,即每次执行一个语句,都会自动的得到事务确认。为了能将多个sql语句组合成一个事务,要将auto-commit模式屏蔽掉。在auto-commit模式屏蔽掉之后,如果不调用commit()方法,sql语句不会得到事务确认。在最近一次commit()方法调用之后的所有sql会在方法commit()调用时得到确认。
public int delete(int sid) {
dbc = new databaseconnection();
connection con = dbc.getconnection();
try {
con.setautocommit(false);// 更改jdbc事务的默认提交方式
dbc.executeupdate("delete from tab1 where id=" + sid);
dbc.executeupdate("delete from tab2 where id=" + sid);
dbc.executeupdate("delete from tab3 where bylawid=" + sid);
con.commit();//提交jdbc事务
con.setautocommit(true);// 恢复jdbc事务的默认提交方式
dbc.close();
return 1;
}
catch (exception exc) {
con.rollback();//回滚jdbc事务
exc.printstacktrace();
dbc.close();
return -1;
}
}
|