Qual é a melhor maneira de obter a última Inserida id usando sqlite de Java?

StackOverflow https://stackoverflow.com/questions/216790

  •  03-07-2019
  •  | 
  •  

Pergunta

Qual é a melhor maneira de obter o último id inserido usando sqlite de Java? Google está me dando respostas diferentes - alguns dizem selecione a última-insert-rowid; outros dizem Statement.getGeneratedKeys de chamada (). Qual é o melhor caminho a tomar? (Eu só quero retornar o id, não usá-lo para outras inserções ou qualquer coisa.)

Foi útil?

Solução

Use getGeneratedKeys() se o driver JDBC suportes de TI. Você não quer mexer tentando obter a chave mesmo após a inserção. Se o controlador não suporta getGeneratedKeys() então gostaria de obter o próximo valor da chave antes da inserção.

Outras dicas

De qualquer abordagem executa a mesma instrução SQL exata, mas java.sql.Statement.getGeneratedKeys() é mais portátil para diferentes bancos de dados subjacentes.

usando o href="http://www.sqlite.org/c3ref/last_insert_rowid.html" rel="noreferrer"> sqlite3_last_insert_rowid() C função API last_insert_rowid() SQL função é a maneira correta para recuperar o rowid gerado durante a última inserção.

SQLite suporta a SQL função escalar sintaxe como:

SELECT function-name();

Portanto, se você não tem acesso à API C diretamente, você pode chamar a função last_insert_rowid() escalar através de uma declaração SELECT.

Se você olhar para o código fonte para o SQLiteJDBC implementação (é isso que você está usando), você vai ver que isso é exatamente o que o autor desse JDBC invólucro tem feito:?

ResultSet getGeneratedKeys() throws SQLException {
    if (getGeneratedKeys == null) getGeneratedKeys = conn.prepareStatement(
        "select last_insert_rowid();");
    return getGeneratedKeys.executeQuery();
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top