Qual é a melhor maneira de obter a última Inserida id usando sqlite de Java?
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.)
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();
}