0

DBで手動で作成したOracleテーブルの列に、列名の数とXMLファイルでの順序で行を挿入しています。XML は構成ファイルと見なされるため、ユーザーは列を管理し、ビジネス ニーズに応じて更新できます。私の Java コードは、XML ファイルを読み取り、XML とドキュメント (コンテンツ管理テクノロジ) API を介して列名を取得します。

これらの列の値を抽出し、行を DB テーブルに挿入できます。ここまでは問題ありません。私のクエリはタイマーで 3 時間実行されるため、このクエリが実行されます。これにより、同じ古いクエリが実行され、古い結果が DB にプッシュされるため、DB テーブルに重複した値が取得されます。

私はこれを避ける必要があります。誰かが私を助けてくれれば、それは素晴らしいことです.

コード:

String rObjectIdCheck = null;
pSelect = dbConn.prepareStatement("select r_object_id from financial_data");

ResultSet rsSelect = pSelect.executeQuery();

while(rsSelect.next()){

    rObjectIdCheck =(String)rsSelect.getObject("r_object_id");


    System.out.println("The OBJECTID from DB is:"+rObjectIdCheck); 
    System.out.println("The ObjectID from DCTM extract:"+rObjectID);

    if (rObjectIdCheck!=rObjectID) {

        pStmt = dbConn.prepareStatement("insert into financial_data ("+sbAttrName.toString()+")" + "values" +"("+sbAttrValue.toString()+")");

        pStmt.addBatch();
        pStmt.executeBatch(); 
    } 

}
sbAttrValue.delete(0, iSBValue);
sbAttrName.delete(0,iSBName);

}
4

1 に答える 1

0

MERGE 構文が正しくありません。次のようになります。正しい変数を入力したことを確認する必要があります。

String query = "MERGE INTO financial_data a using dual ON(a.r_object_id="+rObjectID+")" +
    "WHEN MATCHED THEN UPDATE SET "+sbAttrName.toString()+"="+sbAttrValue.toString()+ 
    "WHEN NOT MATCHED THEN insert ("+sbAttrName.toString()+")" +
    "values" +"("+sbAttrValue.toString()+")";
dbConn.prepareStatement(query); 
于 2013-05-20T17:17:53.200 に答える