私はexecuteBatchを使用してデータを挿入しましたが、データが失われたり、データベースに見つかりませんでしたり、例外が見つかりませんでした。
DB:Oracle。
ドライバのバージョン:11.2.0.4.0
プール:UCP:Oracle Universal Connection Pool
Pls help。addBatchを使用するとデータが失われる
ここに私のコード:
protected static void insertExtraData(String serviceCode, JsonObject extras, PaymentRequest request) {
PreparedStatement ps = null;
long tid = request.getTransId();
long coreId = request.getCoreTransId();
Connection con = null;
try {
con = ConnectionFactory.getConnection();
con.setAutoCommit(false);
ps = con.prepareStatement("INSERT INTO REPORT_ADMIN.SHOPPING_TRANS_DATA VALUES(?,?,?)");
MultiLog.write(serviceCode, tid, coreId, "INSERT INTO REPORT_ADMIN.SHOPPING_TRANS_DATA VALUES(?,?,?)");
Set<String> fieldNames = extras.getFieldNames();
for (String fieldName : fieldNames) {
MultiLog.write(serviceCode, tid, coreId, "para 01: " + tid);
MultiLog.write(serviceCode, tid, coreId, "para 02: " + fieldName);
MultiLog.write(serviceCode, tid, coreId, "para 03: " + extras.getString(fieldName));
ps.setString(1, String.valueOf(tid));
ps.setString(2, Utils.nullToEmpty(fieldName));
ps.setString(3, Utils.nullToEmpty(extras.getString(fieldName)));
MultiLog.write(serviceCode, tid, coreId, "add Batch");
ps.addBatch();
}
ps.executeBatch();
con.commit();
}
catch (Exception e) {
MultiLog.error(serviceCode, tid, "ERROR", e);
}
finally {
Utils.close(ps);
Utils.close(con);
}
}
ここでは私のログです:
[[1460430555111][698905167]]---INSERT INTO REPORT_ADMIN.SHOPPING_TRANS_DATA VALUES(?,?,?) [[1460430555111][698905167]]---para 01: 1460430555111 [[1460430555111][698905167]]---para 02: TransId_Ref [[1460430555111][698905167]]---para 03: 1460430539304 [[1460430555111][698905167]]---add Batch [[1460430555111][698905167]]---para 01: 1460430555111 [[1460430555111][698905167]]---para 02: ContractNo [[1460430555111][698905167]]---para 03: 207-0003 [[1460430555111][698905167]]---add Batch [[1460430555111][698905167]]---para 01: 1460430555111 [[1460430555111][698905167]]---para 02: IdCardNumber [[1460430555111][698905167]]---para 03: ***9272 [[1460430555111][698905167]]---add Batch [[1460430555111][698905167]]---para 01: 1460430555111 [[1460430555111][698905167]]---para 02: CustomerName [[1460430555111][698905167]]---para 03: pa [[1460430555111][698905167]]---add Batch [[1460430555111][698905167]]---para 01: 1460430555111 [[1460430555111][698905167]]---para 02: CompanyName [[1460430555111][698905167]]---para 03: FC [[1460430555111][698905167]]---add Batch [[1460430555111][698905167]]---para 01: 1460430555111 [[1460430555111][698905167]]---para 02: RefNo [[1460430555111][698905167]]---para 03: MS1460430555111 [[1460430555111][698905167]]---add Batch [[1460430555111][698905167]]---para 01: 1460430555111 [[1460430555111][698905167]]---para 02: IdentifyInfo [[1460430555111][698905167]]---para 03: TE_at [[1460430555111][698905167]]---add Batch
テーブルの説明:
CREATE TABLE "REPORT_ADMIN"."SHOPPING_TRANS_DATA" ( "TID" NUMBER NOT NULL ENABLE, "KEY" VARCHAR2(50 BYTE), "VALUE" VARCHAR2(500 BYTE), ) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
multilogにはアイテムのすべての書き込みステートメントが含まれていますか? – eis
Multilogはlog4jなので、私が尋ねたものではない、 –
という改善があります。ログにはすべてのバッチエントリが含まれていますか? – eis