2013-03-06 41 views
-1

我在尝试更新ResultSet时遇到问题。 我正在通过JDBC查询数据库,并找回不是CONCUR_UPDATABLE的结果集。 我需要在指定的列中将'_'替换为''。我怎么能这样做?如何更新JDBC只读结果集的行

String value = derivedResult.getString(column).replace("_", " "); 
derivedResult.updateString(column, value); 
derivedResult.updateRow(); 

这对Updatable很好,但如果它是ResultSet.CONCUR_READ_ONLY呢?

编辑:

这将是一个JDBC驱动程序,它调用另一个JDBC驱动,我的问题是,我需要更换的ResultSet的内容,即使它仅仅是前进,还是只读。如果我设置scroll_insensitive和updatable,这没有问题,但有JDBC驱动程序与只向前结果集一起工作。

解决方案:

  • 我应该尝试移动的结果,一个内存数据库和替换的内容在那里。
  • 我是否应该实现像所有其他类一样行为的结果集:如果需要,调用底层驱动程序函数并进行修改。

我不想使用resulst之后进行更新或插入。基本上这将在选择的查询中完成。

+0

什么是数据库,也许更重要的是什么是查询? – dkateros 2013-03-06 13:00:17

+0

你是如何创建Statement或PreparedStatement的;这与ResultSet的创建方式有关。 – 2013-03-06 13:03:26

+0

db可能会有所不同,因为这将用于使用其他jdbc驱动程序的JDBC驱动程序。由于查询正在改变,列名称包含有关其内容的信息,从那里我知道修改内容。 我创建了一个Statement,PreparedStatement类,它为Statement/PreparedStatement生成底层的JDBC,并从那里获取结果。 – 2013-03-06 13:05:57

回答

1

根据我的经验,更新结果集仅适用于简单查询(在单个表上选择语句)。但是,根据数据库,这可能会改变。我会首先查阅数据库文档。

即使您创建了可更新的自己的结果集,为什么您认为数据库数据会改变?很可能(几乎肯定)更新机制使用的代码不是公有的,只存在于您使用的jdbc驱动程序的结果集实例实现类型中。

我希望以上是有道理的。

+0

查询将始终选择 – 2013-03-06 13:07:57

+0

注意'在一张桌子上'部分:) – dkateros 2013-03-06 13:13:05

+0

如上所述[http://docs.oracle.com/cd/A97339_01/doc/java.816/a81354/resltse2.htm #1018228) – 2013-03-06 13:55:27