您的当前位置:我要购书网>在线阅读>Java/J2EE/JSP

jdbc2/3.0的特征点滴

来源:互联网  作者:  发布:我要购物网收集整理  发布时间:2006-8-31 人气:276

最近写程序已经很少直接用JDBC了,一直都是用Hibernate来招呼,因为现在的集成框架已经很稳定了。不过对JDBC的直接使用还是不可以忽略的,JDBC3.0提供的n多的新特征还是要熟悉了解的,以前学jdbc的时候就是上网找些demo和介绍来学,使用很单一,对JDBC3.0的好多新的特征都忽略了,比如下面一个例子:

Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery("SELECT * FROM user WHERE username='aa'");stmt.executeUpdate("UPDATE user SET lastdatetime=now() where username='aa'");

这是一个用户登录时,经常用到的代码,先是根据用户名aa查找该用户的详细信息,然后再更新该用户的最后登录时间(lastdatetime)。这这个里面,我们用了两个sql语句,这个是我一直用的方法,但是如果用JDBC2.0给我们提供的便利,我们只要写一条sql就够了,其他的都交给jdbc,看下面的代码:

Statement stmt2 = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);ResultSet rs2 = stmt.executeQuery("SELECT * FROM user WHERE username='aa'");rs2.next();rs2.updateDate("lastdatetime", new Date(Calendar.getInstance().getTimeInMillis()));rs2.updateRow();

这里面最主要的特征就是ResultSet.TYPE_FORWARD_ONLY和ResultSet.CONCUR_UPDATABLE,通过初始化Statement时传不同的参数,可以对ResultSet进行不用的错作限制。con.createStatement的时候,有三种可以掉用的函数:

1、createStatement();2、createStatement(int resultSetType, int resultSetConcurrency)3、createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability)

其中resultSetType可选值是: 1、ResultSet.TYPE_FORWARD_ONLY 在ResultSet中只能先前移动游标, 2、ResultSet.TYPE_SCROLL_INSENSITIVE 在ResultSet中可以随心所欲的先前向后移动游标, 3、ResultSet.TYPE_SCROLL_SENSITIVE 在ResultSet中可以随心所欲的先前向后移动游标,同时ResultSet的值有所改变的时候,他可以得到改变后的最新的值其中resultSetConcurrency可选值是: 1、ResultSet.CONCUR_READ_ONLY 在ResultSet中的数据记录是只读的,可以修改 2、ResultSet.CONCUR_UPDATABLE 在ResultSet中的数据记录可以任意修改,然后更新会数据库其中resultSetHoldability可选值是: 1、ResultSet.HOLD_CURSORS_OVER_COMMIT 表示修改提交时,不关闭ResultSet的游标 2、ResultSet.CLOSE_CURSORS_AT_COMMIT 表示修改提交时,关闭ResultSet的游标

对于查询操作第一种初始化方法createStatement(),相当于第二种方法的createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY),第三种方法的createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, ResultSet.CLOSE_CURSORS_AT_COMMIT)

下面写一段demo的代码,我把一些特征函数都用出来,但是只是用来查考和说明名灵活性的。

Statement stmt2 = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); ResultSet rs2 = stmt.executeQuery("SELECT * FROM user"); rs2.next(); rs2.updateDate("lastdatetime", new Date(Calendar.getInstance().getTimeInMillis())); rs2.updateRow(); rs2.afterLast(); while(rs2.previous()){ /**....*/ } rs.beforeFirst(); while(rs2.next()){ /**....*/ } rs.last(); rs.first(); rs.absolute(5); //游标移动到第5条 rs.absolute(-1); //游标移动到最后一条 rs.relative(-5); //游标向上移动5条 rs.relative(2); //游标向下移动2条 rs.deleteRow(); //删除当前行 rs.last(); //游标移动到最后 rs.updateString("summary", "This is ..."); //设置更新的字段值 rs.cancelRowUpdates(); //取消刚才输入的更新 rs.getRow(); //得到当前行号 rs.moveToInsertRow(); //游标移动到要新增的那条记录上 rs.updateInt("id", 1); rs.updateString(2, "my name"); rs.insertRow(); //插入新记录

JDBC2.0提供的还有一个功能就是数据库的批量操作:

con.setAutoCommit(false); Statement stmt3 = con.createStatement(); stmt3.addBatch("insert ....."); stmt3.addBatch("insert ....."); int[] rows = stmt3.executeBatch(); con.commit();

但是有一点要注意,stmt3.executeBatch()他不会自动给你回滚数据操作,当你有5条update语句的时候,如果第三条发生错误,那么将无法自动回滚前两条update语句的影响,所以一定要自己手工进行事务管理。

相关文章
· jdbc基础教程之preparedstatement
· jdbc连接各种数据库方式列表
· jdk、jre、jvm之间的关系
· jdbc2/3.0的特征点滴
· jdbc驱动程序的类型
· jdbc基础教程之callablestatement
· jdk中keytool常用命令
· jdk1.5使用总结 --《java 1.5 tiger..
· jdk5.0的11个主要新特征
· jdk5.0 范型小测验1
热点文章
%>
· creating user controls
· 提高fastreplace速度 (fstrrep.pas)
· asc ii 完整码表及简介
· 自动生成拼音(汉字反查到拼音)
· sql2000无法安装的解决办法
· 浏览器集成教学 自定义浏览器
· vc++技术内幕(第四版)笔记(第7章)
· mysql5.0中文乱码解决方案
· sql server日期计算
· vc下利用ado连接access数据库
 淘宝旺旺:我要购书网上书店『图书目录
本购书中心地址: 杭州市延安路111号清波商厦南楼D座(总部) 上海市闸北区老沪太路网上购书中心(沪部),  邮编:310002
电子邮件:books@51goushu.com  经营许可证编号:沪ICP备06038574号
版权所有 2003-2008 © All Rights Reserved .购书网