2016-10-19 4 views
0

Я не могу получить последний идентификатор вставки с помощью JdbcTemplate с использованием Spring Framework, перед использованием функции last_insert_id() я искал много других способов, но не работает с Это. Кстати, моя таблица имеетDerby - LAST_INSERT_ID() не работает с JDBC

private static final String insertResponse = 
     "INSERT INTO response (" + 
     " idReceiver) " + 
     "VALUES (?)"; 

public static void saveResponse(Response response, User user) { 
    dataSource = getDataSource(); 



    JdbcTemplate template = new JdbcTemplate(dataSource); 

    //"select id from users where username ='"+ user.getUsername +"'"; 
    // define query arguments 
    Object[] params = new Object[] { 1 }; 
    int[] responseTypes = new int[] { Types.INTEGER }; 
    int row = template.update(insertResponse, params, responseTypes); 
    if (row >0){ 
    SqlRowSet rowSet = template.queryForRowSet("SELECT LAST_INSERT_ID() AS id"); 
    int lastInsertedID=0; 
    if (rowSet.next()) 
     lastInsertedID = rowSet.findColumn("id"); 
    System.out.println("last insert row is : "+lastInsertedID); 
} 

Моей таблицы ответы было создать с помощью этой команды:

CREATE TABLE RESPONSE (
    ID INT NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY 
    (START WITH 1, INCREMENT BY 1), 
    idReceiver INT NOT NULL 
); 

Когда я запускаю этот код моей JVM говорит: «Эй, парень, у вас есть это исключение: орг .springframework.jdbc.BadSqlGrammarException: StatementCallback; плохая грамматика SQL [SELECT LAST_INSERT_ID() AS id]; вложенное исключение - java.sql.SQLSyntaxErrorException: Синтаксическая ошибка: встречается «" в строке 1, столбец 29. "

+0

Если выполнить этот запрос непосредственно на ядро ​​базы данных, у вас есть правильный результат, не так ли? – Hackerman

+0

Просто догадайтесь: можете ли вы попробовать с помощью 'SELECT LAST_INSERT_ID() в качестве идентификатора из double'? – Insac

+0

@Hakerman он дает мне то же самое "Синтаксическая ошибка: встречается" "в строке 1, столбец 29." –

ответ

1

Если кто-то моя такая же проблема, я решил ее, после этого answer ..

KeyHolder keyHolder = new GeneratedKeyHolder(); 
    template.update(
    new PreparedStatementCreator() { 
     @Override 
     public PreparedStatement createPreparedStatement(java.sql.Connection connection) throws SQLException { 
      PreparedStatement ps = 
      connection.prepareStatement(insertResponse, new String[] {"id"}); 
      ps.setInt(1, 1); 
      return ps; 
      } 
     }, 
     keyHolder); 

    System.out.println("last inserted id is "+keyHolder.getKey()); 
Смежные вопросы