2

次のコードDb2を使用してデータベースを更新しようとしています。Java

String sSqlString = "UPDATE P6DEVCDB00.P6OSTAPF SET STATVAL = '" + sStatVal + "' WHERE  OPIID = '" + sOperationsitemid + "' AND CONGRPC = '" + sConfigGrpCode  + "'";

// Do your select on a Db table.
//statement = con.createStatement();
statement = con.prepareStatement(sSqlString);

int RowsAffected = statement.executeUpdate();
con.commit();
System.out.println(RowsAffected);

次に、次のエラーが表示されます。

DB2 SQL Error: SQLCODE=-7008, SQLSTATE=55019, SQLERRMC=P6OSTAPF  ;
P6DEVCDB00;3, DRIVER=3.58.81

実行するSQLを出力しました:

UPDATE  P6DEVCDB00.P6OSTAPF SET STATVAL = 'ON' 
WHERE   OPIID = 'B20120707000681531' AND CONGRPC = 'STKLSTSTAT

このSQLをSQLUIツールで直接実行すると、機能し、レコードが更新されます...

4

1 に答える 1

0

問題は、「ジャーナリング」されていないテーブル、つまりトランザクションのセットアップではないテーブルでトランザクションを使用しようとしていることです。

理想的には、特にそのプロパティをテストするために、すべてのテーブル (トランザクションで実行される) をジャーナリングとして設定する必要があります。障害をシミュレートできるかどうかに関係なく、コードがトランザクションの下にあることを処理できることを確認する必要があります。 また、状況によっては、トランザクションを明示的に管理する必要がない場合もあります。Springのようなフレームワークを使用している場合、通常はトランザクション管理できますが、これは通常、iSeries テーブルでジャーナリングが必要であることを意味します。

基本的なコードの動作をテストするだけの場合は、HSQLDBなどのメモリ内データベースの使用を検討してください(LUW DB2 の動作をエミュレートできますが、残念ながらライブラリ リストはエミュレートできません)。ボックスに接続し、ジャーナリングを設定します。

于 2013-05-22T15:36:06.713 に答える