当前位置:  技术问答>java相关

jdbc中如何实现结果集的回滚?大大地给分!

    来源: 互联网  发布时间:2015-10-07

    本文导语:  jdbc中如何实现结果集的回滚? 对RESULTSET有几种操作? 非法的游标又是啥问题? 空指针异常有几种情况?如何调试? 每次我都找不到原因. 大大地给分! | 1. 要结果集具有回滚功能,创建的statement...

jdbc中如何实现结果集的回滚?

对RESULTSET有几种操作?

非法的游标又是啥问题?

空指针异常有几种情况?如何调试?

每次我都找不到原因.

大大地给分!

|
1.
要结果集具有回滚功能,创建的statement应该为:
Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, CONCUR_READ_ONLY);
第一个参数表示结果集是否回滚,第二个参数表示结果集的并发操作性,即是否通过结果集来改变数据库记录。上面的调用表示生成的结果集可以回滚,但此时的结果集与数据库脱钩,即使别的程序更新了数据库,但不反映到你的结果集中,如果要让其反映出来,即让你的结果集是适时更新的,则第一个参数应该是:ResultSet.TYPE_SCROLL_SENSITIVE;关于第二个参数,很容易顾名思义,另一种是ResultSet.CONCUR_UPDATABLE

2.在结果集中可以进行很多操作,具体看一下文档,很明白。一般是从中取值,如果结果集是可更新的,则还可以进行插入记录,删除记录,更新纪录等操作。

3.我没有碰到过,不知道,主要是我对数据库不熟悉,不敢乱说。

4.在跟数据库操作时,有基础都可能出现空指针,主要表现在以下几方面:

数据库连接没有建立,此时connection为null,造成原因可能有:没有找到驱动程序;建立连接的参数错误;

结果集本身就是null,调用了next()方法,此时也会跑出空指针异常;

去数据库字段的值时,数据库字段本身没有值,调用了该值类型相应的操作,最常见的是取出一个字符串没有判断是否为null而直接进行去除空格操作;

还有就是在关闭数据库时,没有对结果集,执行语句,以及数据库连接进行null的判断,直接调用close()方法。如果前面的各部分操作是正常的,本来该处是不用null判断的,但可能就是前面的某一处出现错误,比如数据库连接没有建立,而关闭时调用conn.close(),就会出现空指针。

估计还有其他的,暂时没有想到,较少遇到吧。

敲得好累啊。哎

|
createStatement
public Statement createStatement(int resultSetType,
                                 int resultSetConcurrency,
                                 int resultSetHoldability)
                          throws SQLExceptionCreates a Statement object that will generate ResultSet objects with the given type, concurrency, and holdability. This method is the same as the createStatement method above, but it allows the default result set type, concurrency, and holdability to be overridden. 

Parameters:
resultSetType - one of the following ResultSet constants: ResultSet.TYPE_FORWARD_ONLY, ResultSet.TYPE_SCROLL_INSENSITIVE, or ResultSet.TYPE_SCROLL_SENSITIVE
resultSetConcurrency - one of the following ResultSet constants: ResultSet.CONCUR_READ_ONLY or ResultSet.CONCUR_UPDATABLE
resultSetHoldability - one of the following ResultSet constants: ResultSet.HOLD_CURSORS_OVER_COMMIT or ResultSet.CLOSE_CURSORS_AT_COMMIT 
Returns:
a new Statement object that will generate ResultSet objects with the given type, concurrency, and holdability 
Throws: 
SQLException - if a database access error occurs or the given parameters are not ResultSet constants indicating type, concurrency, and holdability
Since:
1.4 
See Also:
ResultSet

|
这个问题我知道
建Statement时用:
Statement stmt=conn.createStatement(
               ResultSet.TYPE_SCROLL_INSENSITIVE,
               ResultSet.CONCUR_UPDATABLE);
然后ResultSet rs=stmt.executeQuery("select ... from ...");
这时rs就可回滚了

我只用过  boolean absolute(int row) 纪录集定位到第某条
          void    beforeFirst()     移到第一条纪录前
两个方法,大概也就够了

注意,使用这个有可能产生一些奇怪的乱码

|
ResultSet.TYPE_FORWORD_ONLY
ResultSet.SCROLL_SENSITIVE-------结果集是完全可浏览的,只要亦更新立刻就能在结果集中反映
ResultSet.SCROLL_INSENSITIVE -------结果集是完全可浏览的,但只有在结果集关闭后才能看到更新.为了看到结果集,要创建一个新的结果集.


|
同意wjmmml(笑着悲伤) 的观点,小弟用的是Oracle8i,用Java.sql.ResulSet就不支持回滚功能,而Oracle自带的ResultSet则可以实现回滚,但功能很滥,象排序的功能就没有。

|
最好用jdbc第四类驱动,针对你的数据库下载一个驱动程序。
非常好用。
驱动程序不行,是无法实现回滚的。

|
非法游标和空指针大概是你把游标移到了记录集第一条纪录之前或最后一条纪录之后时对记录机进行了操作所至

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问JDBC中返回结果参数的存储过程{?=call 过程名(?,?,...)}返回的结果如何得到?
  • 关于jdbc的问题,如何得到结果记录的条数。
  • 采用那种JDBC驱动返回的结果集是可以滚动的?
  • 通过JDBC存取数据库,该怎样得到结果集的总数?
  • 如何把用jdbc查出的resultset结果集数据通过网络发送到另一台机器上(给100分)
  • jboss高手请进,有关jdbc的问题!报错:"对只转发结果集的无效操作"(急死我了!!!愿以200分送上!)
  • Myeclipse中自带Tomcat的JDBC连接池配置(mysql和mssql)
  • 高性能JDBC驱动 DataDirect JDBC Drivers
  • mysql jdbc连接mysql数据库步骤及常见参数详解
  • 关于JDBC-ODBC和JDBC的区别
  • JDBC驱动代理 HA-JDBC
  • 访问MS SQL能不能直接用JDBC,如果能相应的JDBC Driver从哪里得到?
  • easy question:jdbc与jdk需要分别安装吗。如何设置jdbc的classpath
  • JDBC 工具包 Midao JDBC
  • 请问JDBC和JDBC-ODBC有什么区别?是不是连接的时候也有所不同。
  • JDBC 驱动程序 Drizzle-JDBC
  • JDBC执行日志 JDBC Logger
  • OLAP数据源的JDBC驱动 Jdbc4Olap
  • 讨论:纯java的JDBC与JDBC-ODBC桥的比较?那种效率高、快?(面向服务端)
  • jdbc1.2 jdbc2.0里面的类是干什么用的?
  • 请问连接本机数据库的JDBC,和连接远程的JDBC有没有区别?
  • jdbc连接数据库,能否有jdbc中的方法进行安全设置:
  • 百万火急:一个 jsp的jdbc的问题,用的是jdbc,odbc桥。
  • 问一个简单的问题,我装了oracle 8.05,我并没有发有发现JDBC这个目录,是不是我要下载jdbc for oracle。
  • jdbc 连接sybase11.9时出错,错误提示:JZ0D5: 装载协议 com.sybase.jdbc2.tds.tds 时出错
  • java开发数据库,一般是用JDBC-ODBC桥,还是JDBC驱动程序连接数据库呢?
  • 请问有没有mdb的jdbc驱动?我不想用jdbc-odbc了.


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3