概要:Oracleビューから行を読み取り、Notesドキュメントを作成し、ドキュメントを保存してから、ドキュメントの一意のIDをOracleに書き戻す必要があります。
接続とデータの読み取りに問題はありません。Oracle11データベースに接続するタイプ4接続を使用しています。Oracleビューは、更新を許可するように設定されています。ビューには、ここで概説されているものは何もありません。Oracleでは、ビューを介してレコードをINSERTまたはUPDATEすることは可能ですか?
*同じユーザー名とパスワードを使用して、SQLステートメントを入力することでビューを正常に更新できます。
* conn.setAutoCommit(false);を使用してみました これは効果がありませんでした。
*結果セットが更新可能であることを確認しました(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
コンソールからのエラーは次のとおりです。
これは、Oracleに書き込む内容です:BF8091259610C61B87257B16005C14FB
はupdatable=1008であり、updatable=1007ではありません。値は1008です。
結果セットが閉じています:false
NOTES_DOC_ID列の更新を過ぎました
java.security.AccessControlException:アクセスが拒否されました(java.lang.RuntimePermission exitVM.0)
ユーザーにDBAアクセス権を要求する前に、
java.sql.SQLSyntaxErrorException:ORA-01031:権限が不十分です
これは大きな手がかりだと思います。私のDBAは、私にさらにどのようなアクセス権を与えるべきかを知りません。
DBAは、refカーソルの使用を開始することを望んでいますが、これは問題ありませんが、JDBCアクセスに何らかのセキュリティ設定があり、私をつまずかせているのではないかと思います。最初にそれを調べたいと思います。セキュリティ上の問題がある場合は、行の読み取り方法を変更しても違いはないと思います。これを行う方法に関するすべてのドキュメントのほとんどは、オラクルのWebサイトおよびこのサイトから入手したものです。