Java 如何更新JDBC只读结果集的行

Java 如何更新JDBC只读结果集的行,java,jdbc,Java,Jdbc,尝试更新结果集时遇到问题。 我通过JDBC查询数据库,并返回一个不可CONCUR_更新的结果集。 我需要在指定的列中将“\u1”替换为“”。我怎么能这么做 String value = derivedResult.getString(column).replace("_", " "); derivedResult.updateString(column, value); derivedResult.updateRow(); 这在可更新上很好,但是如果它是ResultSet.CONCUR\u R

尝试更新结果集时遇到问题。 我通过JDBC查询数据库,并返回一个不可CONCUR_更新的结果集。 我需要在指定的列中将“\u1”替换为“”。我怎么能这么做

String value = derivedResult.getString(column).replace("_", " ");
derivedResult.updateString(column, value);
derivedResult.updateRow();
这在可更新上很好,但是如果它是ResultSet.CONCUR\u READ\u呢

编辑:

这将是一个JDBC驱动程序,它调用另一个JDBC驱动程序,我的问题是我需要替换结果集的内容,即使它是只向前的或只读的。如果我将scroll_设置为不敏感且可更新,则不会有问题,但有一些JDBC驱动程序可用于仅向前的结果集

解决方案:

我是否应该尝试将结果移动到inmemory数据库并替换其中的内容。 我是否应该实现与我的所有其他类一样的resultset:调用底层驱动程序函数,并在需要时进行修改。
我不想在事后使用result进行更新或插入。基本上,这将在select查询上完成。

根据我的经验,更新结果集只能用于单个表上的简单查询select语句。但是,根据数据库的不同,这可能会发生变化。我将首先查阅数据库文档

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


我希望上述内容有意义。

什么是数据库,也许更重要的是,什么是查询?您是如何创建语句或PreparedStatement的;这与ResultSet的创建方式有关。db可能有所不同,因为这将在使用其他JDBC驱动程序的JDBC驱动程序中使用。由于查询正在更改,列名称包含有关其内容的信息,因此我知道如何修改内容。我创建了一个语句PreparedStatement类,它向底层JDBC生成一个语句/PreparedStatement,并从中获取结果。@BalazsGunics显示了用于创建和执行该语句的代码。这没有用,因为这将是一个JDBC驱动程序,它调用另一个JDBC驱动程序,我的问题是我需要替换结果集的内容,即使它是只向前或只读的。如果我将scroll_设置为不敏感且可更新,则不会有问题,但有一些JDBC驱动程序可用于仅向前的结果集。我正在尝试将结果移动到内存数据库并替换其中的内容。或者我应该实现与我的所有其他类类似的resultset:调用底层驱动程序函数,并根据需要进行修改。查询将始终是Selects这样描述的,是的。但查阅特定的数据库手册将是一条可行之路。是这样吗?将要使用的驱动程序之一不支持可更新的结果集,我想的是创建一个内存中的数据库,并对其运行一个不区分滚动的查询,使用CONCUR_Updateable获得一个可更新的结果集。然而,这对性能来说是一个巨大的打击,所以我应该尝试从数据库本身获取可更新的结果集,如果它们支持内存中的东西只是为了回退。您认为如何?假设您创建了内存数据库并设法从中获得可更新的结果集,您必须问自己:为什么对内存数据库的任何更新都会传播到物理数据库并实际修改其数据?