2017-08-24 1 views
1

Lors de l'utilisation de Postgresql JDBC, Insérer une ligne avec l'instruction executeUpdate mais le résultat était zéro. J'ai trouvé que les données ont été insérées. Le document API indique que la méthode executeUpdate renvoie le nombre de lignes affecté.Lors de l'utilisation de Postgresql JDBC, instruction INSERT qui entraînera l'insertion de 0 lignes

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

Je n'ai aucune idée de ce que vous demandez. S'il vous plaît nous montrer du code, et des données qui expliquent ce qui se passe. –

+0

La ligne est insérée mais enregistre toujours Debug.getLogger(). Warn ("Impossible d'insérer l'événement dans {} => {}", DatabaseTables.EVENT_HIST, Debug.getString (jobj)); –

+0

Où est l'instruction 'INSERT' actuelle? –

Répondre

0

Il est peut-être que vous avez une partition à base de déclenchement dans votre base de données, comme décrit ici in PostgreSQL manual.

Cela se passe complètement du côté DB, sauf qu'il renvoie toujours "0 lignes insérées".

Vérifiez votre schéma de base de données pour les déclenchements de partitionnement dans la table DatabaseTables.EVENT_HIST.

+0

Merci pour votre réponse, Il y avait des déclencheurs de partitionnement dans la table EVENT_HIST –