如何解决使用包含 rownum 的选择查询更新 ResultSet
我正在尝试使用不包含主键的表执行选择查询,因此我在选择查询中包含行号,以便结果集变为可滚动但未更新并给出以下错误>
Java 代码:
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
public class Test
{
public static void main(String[] args) throws Exception
{
Connection con = Provider.getoracleConnection();
String sql = "select rownum,users.* from users";
Statement st = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs = st.executeQuery(sql);
rs.absolute(1);
rs.updateString(3,"Bibek Bhusan");
rs.updateRow();
}
}
错误:
Exception in thread "main" java.sql.sqlException: ORA-01446: cannot select ROWID from,or sample,a view with disTINCT,GROUP BY,etc.
at oracle.jdbc.driver.DatabaseError.throwsqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:955)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1169)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3368)
at oracle.jdbc.driver.UpdatableResultSet.executeUpdateRow(UpdatableResultSet.java:2690)
at oracle.jdbc.driver.UpdatableResultSet.updateRow(UpdatableResultSet.java:1835)
at Test.main(Test.java:15)
解决方法
只需删除 rownum 列,它应该可以工作。 rownum 不标识特定行。它只是该特定查询结果中行的位置。重新执行相同的查询可以以不同的顺序返回行,在这种情况下,行将具有不同的 rownum。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。