2013-02-18 54 views
0

概述:需要从甲骨文视图逐行读取和创建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网站以及本网站获得的。

+1

为什么不简单地使用“普通”的UPDATE语句?我从来没有看到可更新结果集在任何数据库中正常工作。 – 2013-02-18 17:20:27

+0

由于数据的性质,这不是一个真正的选项。游标需要被使用。 – 2013-02-18 18:35:46

+0

如果您尝试直接在sql中更新视图,请使用sql * plus说明它的工作原理吗?恕我直言,赋予DBA权利并不是最聪明的想法。 – Plouf 2013-02-19 09:37:55

回答

0

我要回答我的问题,并解释我是怎么过去,这路障。最后,我基本上做了'a_horse_with_no_name'的建议。

而是使用ResultSet游标或REF CURSOR执行更新的,我可以用一个简单的UPDATE语句。这是可能的,因为我能够说服DBA创建一个唯一标识符列。我们无法绕过由resultSet的updateRow()方法引起的异常。在添加唯一标识符之前,没有可靠使用UPDATE语句的密钥。

下面是代码,其中即updateSQL是串保持更新SQL语句:

updateResultInt = updateStatement.executeUpdate(updateSQL); 

它如果成功,则返回1。

请注意,如果您使用TOra或sql plus等工具检查更新语句,则必须记住手动提交它们。如果你不试图运行它,你的java代理将会挂起。这里有一个很好的参考,帮助我解决这个问题:SQL Update hangs Java program

感谢那些评论!