MySQL Как получить ID ПОСЛЕДНЕГО_INSERT_ID при использовании INSERT IGNORE INTO?

Scenerio:

  1. Я вставляю CSV-файл в свою базу данных.
  2. Я использую драйвер jdbc для перебора файла и выполнения вставок
  3. Создается столбец nameuniqueпоэтому вставки не изменяют таблицу, когда поступает одно и то же значение
  4. Я использую INSERT INTO IGNOREчтобы итерация не прерывалась при возникновении события
  5. Я использую LAST_INSERT_ID()для добавления в качестве FK в следующую таблицу вставки
  6. Я получаю 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

9
задан stackoverflow 30 March 2012 в 13:15
поделиться