概述:需要从甲骨文视图逐行读取和创建Notes文档,保存文件,然后写文档的唯一ID到Oracle。无法从JDBC更新甲骨文视图
我能够读取连接并读取数据没有问题。我正在使用连接到Oracle 11数据库的类型4连接。 Oracle视图设置为允许更新。该视图中有没有什么是概述这里:In Oracle, is it possible to INSERT or UPDATE a record through a view?
*使用相同的用户名和密码,你可以在SQL语句中键入成功更新视图。
*使用conn.setAutoCommit尝试(假);这没有效果。
*已验证结果集是可更新(1008)
*用户已给予了充分的DBA访问(暂时)
*我试图在createStatement方法
第一个参数的每一个可能的组合...
Statement statement = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = statement.executeQuery(fetch);
...
String UNID = doc.getUniversalID(); //gets unique id from saved Notes Document
System.out.println("This is what to write to Oracle:" + UNID);
System.out.println("is updatable=1008, not updatable=1007 value is:" + rs.getConcurrency());
System.out.println("is Result Set Closed:" + rs.isClosed());
rs.updateString("NOTES_DOC_ID", UNID);
System.out.println("got past updating NOTES_DOC_ID column");
rs.updateRow(); //fails here
下面是从控制台的错误:
这是写甲骨文:BF8091259610C61B87257B16005C14FB
是可更新= 1008,不可更新= 1007值是:1008
是结果集关闭:假
了过去更新NOTES_DOC_ID列
java.security.AccessControlException:访问被拒绝(java.lang.RuntimePermission exitVM.0)
之前要求用户具有DBA访问我会得到一个
java.sql.SQLSyntaxErrorException:ORA-01031:权限不够
我认为这是一个很大的线索。我的DBA不知道进一步访问给我什么。
的DBA是要我开始使用REF游标,这是很好的,但我怀疑有一些为JDBC访问各种安全设置被绊倒了我,我想先探索。如果存在安全问题,那么我不认为改变我读取行的方式将会产生影响。大多数关于如何做到这一点的文档都是从Oracle网站以及本网站获得的。
为什么不简单地使用“普通”的UPDATE语句?我从来没有看到可更新结果集在任何数据库中正常工作。 – 2013-02-18 17:20:27
由于数据的性质,这不是一个真正的选项。游标需要被使用。 – 2013-02-18 18:35:46
如果您尝试直接在sql中更新视图,请使用sql * plus说明它的工作原理吗?恕我直言,赋予DBA权利并不是最聪明的想法。 – Plouf 2013-02-19 09:37:55