Scenerio:MySQL Come faccio a recuperare l'ID di LAST_INSERT_ID quando utilizzo INSERISCI IGNORE INTO?
- sto inserendo un file CSV nel mio database.
- che sto utilizzando il driver JDBC per iterare il file e fare i miei inserti
- Una colonna
name
è fatto in modo daunique
inserti non cambiano il tavolo quando stesso valore arriva - sto usando
INSERT INTO IGNORE
per mantenere il iterazione rottura quando l'evento accade - sto usando LAST_INSERT_ID() per aggiungere come FK nella tabella successiva inserto
- ottengo 0 quando
INSERT_IGNORE
accade
Come posso risolvere questo problema?
Connection con = null;
try
{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
con.setAutoCommit(false);
Statement s1 = (Statement) con.createStatement();
s1.executeUpdate("INSERT IGNORE INTO ORIGIN (ORI_NAME) VALUES(\""
+ d.getOriginName() + "\")");
Statement s2 = (Statement) con.createStatement();
s2.executeUpdate("INSERT IGNORE INTO STOCK (ORI_ID,S_TITLE) VALUES ("
+ "(SELECT ORI_ID FROM ORIGIN WHERE ORI_ID =LAST_INSERT_ID()),\""
+ d.getStockTitle() + "\")");
}
con.commit();
}
catch (Exception e)
{
if (con != null)
try
{
con.rollback();
}
catch (SQLException e1)
{
e1.printStackTrace();
}
e.printStackTrace();
}
finally
{
if (con != null)
try
{
con.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
Esempio di file CSV da inserire nel database
US, P1, M, 200, 344
US, P1, L, 233, 344
US, P2, M, 444, 556
MX, Q4, L, 656, 777
Tabelle: http://sqlfiddle.com/#!2/b5752
Wha t è il problema che stai cercando di risolvere? Se stai facendo "INSERISCI IGNORA" e l'ignora accade, non c'è un inserto quindi non c'è un Last_insert_id per quella transazione. Se si desiderava l'ultimo ID di inserimento precedente, era necessario acquisirlo subito dopo l'inserimento. Ma per il tentativo di inserimento più recente, se non è successo, last_insert_id sarà 0. –
@DMac bene allora come faccio a inserire un inserto in un database quando non vuoi sostituire la colonna esistente quando già esiste? – stackoverflow
@stackoverflow Ho postato una risposta qui sotto che si adatta a mysql. –