2017-08-24 63 views
1

使用Postgresql JDBC时,使用executeUpdate语句插入行但结果为零。我发现数据已插入。 API文档告诉executeUpdate方法返回受影响的行数。使用Postgresql JDBC时,将导致插入0行的INSERT语句

mSqlInsertEventHist = "INSERT INTO " + DatabaseTables.EVENT_HIST + 
" (event_id, mntr_id, mntr_zone, mntr_name, mntr_class_name, mntr_class_sub_type, host_name, ip_addr, " + 
" metric_id, metric_name, perf_name, object_name, event_type, event_master_id, " + 
" event_name, event_level, event_msg, threshold, event_recv_day, event_reco_dt, event_recv_dt," + 
" event_saved_dt, blackout_yn, msg_filter_yn) " + 
" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, " + " now() " + ", ?, ?) "; 

mPstmtInstEvtHist.setLong(1, eventid); 
mPstmtInstEvtHist.setInt(2, mntrid); 
mPstmtInstEvtHist.setString(3, mntrZone); 
mPstmtInstEvtHist.setString(4, mntrname); 
mPstmtInstEvtHist.setString(5, mntrClsName); 
mPstmtInstEvtHist.setString(6, mntrClsSubType); 
mPstmtInstEvtHist.setString(7, hostname); 
mPstmtInstEvtHist.setString(8, ipAddr); 
mPstmtInstEvtHist.setInt(9,  Integer.parseInt((String)dataobj.get(MQConstants.METRIC_ID))); 
mPstmtInstEvtHist.setString(10, metricname); 
mPstmtInstEvtHist.setString(11, perfname); 
mPstmtInstEvtHist.setString(12, objectname); 
mPstmtInstEvtHist.setString(13, dataType); 
mPstmtInstEvtHist.setInt(14, 
Integer.parseInt((String)dataobj.get(MQConstants.EVENT_MASTER_ID))); 
mPstmtInstEvtHist.setString(15, eventname); 
mPstmtInstEvtHist.setString(16, eventlvl); 
mPstmtInstEvtHist.setString(17, evtMsg); 
mPstmtInstEvtHist.setObject(18, jsonObj); 
mPstmtInstEvtHist.setInt(19, 
Integer.parseInt((String)dataobj.get(MQConstants.EVENT_RECV_DAY))); 
mPstmtInstEvtHist.setTimestamp(20, colTs); 
mPstmtInstEvtHist.setTimestamp(21, rcvTs); 
mPstmtInstEvtHist.setString(22, 
(String)dataobj.get(MQConstants.BLACKOUT_YN)); 
mPstmtInstEvtHist.setString(23, 
(String)dataobj.get(MQConstants.MSG_FILTER_YN)); 
rtn = mPstmtInstEvtHist.executeUpdate(); 
if (rtn == 1 ) {//NOPMD 
    Debug.getLogger().trace("Inserted Event into {} => {}, {}, {} " 
    ,DatabaseTables.EVENT_HIST , mntrid, eventname, eventlvl); 
} else { 
    Debug.getLogger().warn("Failed to insert Event into {} => {}", 
    DatabaseTables.EVENT_HIST, Debug.getString(jobj)); 
} 
+0

我不知道你在问什么。请给我们展示一些代码和解释发生的事情的数据。 –

+0

插入行但始终记录Debug.getLogger()。warn(“无法将事件插入{} => {}”, DatabaseTables.EVENT_HIST,Debug.getString(jobj)); –

+0

实际的INSERT语句在哪里? –

回答

0

这可能是你在你的数据库基于触发器的分区,这里in PostgreSQL manual描述。

它完全发生在数据库端,除了它总是返回“0行插入”。

检查数据库模式以查找DatabaseTables.EVENT_HIST表中的分区触发器。

+0

感谢您的回答,EVENT_HIST表中存在分区触发器 –