2015-06-18 2 views
0

Я пытаюсь получить id вставленной строки. Currenly Я не получаю id назад, и получаю исключение java.sql.SQLException: Column 'route_id' not found., но когда я запрашиваю его, как в прокомментированном коде, я получаю его, но он имеет все строки в таблице routes. Как я могу это исправить?Получить идентификатор вставленной строки

Я ценю любую помощь.

Код:

if (routesTables.next()) { 

    PreparedStatement prepRoutesInsert = con.prepareStatement(
      "INSERT INTO routes(direction, route)" 
        + "VALUES(?, ?)", 
      Statement.RETURN_GENERATED_KEYS); 

    prepRoutesInsert.setString(1, direction); 
    prepRoutesInsert.setInt(2, route); 

    prepRoutesInsert.executeUpdate(); 

    // PreparedStatement prepRoutesInsert2 = 
    // con.prepareStatement(
    // "SELECT route_id from routes"); 
    // ResultSet rs = prepRoutesInsert2.executeQuery(); 
    // while(rs.next()){ 
    // int route_id2 = rs.getInt("route_id"); 
    // System.out.println(route_id2); 
    // } 

    try (ResultSet generatedKeys = prepRoutesInsert 
      .getGeneratedKeys()) { 
     if (generatedKeys.next()) { 
      int id = generatedKeys.getInt("route_id"); 
      System.out.println("The id is: " + id); 
     } 

    } 
} 

маршруты таблице:

stt.execute("CREATE TABLE IF NOT EXISTS routes (" 
       + "route_id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY," 
       + "direction VARCHAR(30) NOT NULL, " 
       + "route INT(11) NOT NULL)"); 
+1

'generatedKeys.getInt ("route_id")' ==> 'generatedKeys.getInt (1)' или 'generatedKeys.getInt («GENERATED_KEY») 'исправит эту проблему. – dasblinkenlight

+1

Да, он вас очень благодарен;) – MrPencil

ответ

1

Это может помочь вам -

public static int insertInDB(String sqlQuery) { 
     Connection conn = getDBConnection(); 
     ResultSet rs = null; 
     int id = 0; 
     try { 
      Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); 
      stmt.executeUpdate(sqlQuery); 
      Statement stmt1 = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); 
      rs = stmt1.executeQuery("select last_insert_id()"); 
      while(rs.next()){ 
       id = rs.getInt(1); 
      } 
     } catch (Exception e) { 
      closeDBConnection(); 
     } 
     return id; 
    } 

Пожалуйста, имейте в виду, что last_insert_id() возвращает что последний вставленный идентификатор в любой из таблиц в вашей всей схеме. Убедитесь, что этот метод является атомарным, и никто не вставляет его, пока этот метод полностью выполняется.

Пожалуйста, прочитайте это - https://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

Это предыдущее обсуждение может помочь - LAST_INSERT_ID() MySQL