Scenerio:
- Я вставляю файл CSV в свою базу данных.
- Я использую драйвер jdbc для итерации по файлу и выполняю мои вставки
- A
name
столбец сделан unique
, поэтому вставки не изменяют таблицу, когда приходит то же значение - Я использую
INSERT INTO IGNORE
, чтобы не допустить прерывания итерации при возникновении события - Я использую LAST_INSERT_ID () для добавления в качестве FK в следующую таблицу вставки
- Iполучить 0, когда
INSERT_IGNORE
произойдет
Как мне это исправить?
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();
}
}
Пример файла CSV, который нужно вставить вбаза данных
US, P1, M, 200, 344
US, P1, L, 233, 344
US, P2, M, 444, 556
MX, Q4, L, 656, 777
Таблицы: http://sqlfiddle.com/#!2/b5752