Pergunta

Existe uma maneira de plataforma de banco de dados cruzada para obter a chave primária do registro que acabou de inserir?

notei que esta resposta diz que você pode obter-lo chamando SELECT LAST_INSERT_ID() e eu acho que você pode chamar SELECT @@IDENTITY AS 'Identity'; há uma maneira comum de fazer isso accross bancos de dados em jdbc?

Se não como você sugere que eu implementar isso por um pedaço de código que pode acessar qualquer um SQL Server, MySQL e Oracle?

Foi útil?

Solução

Copiado do meu código:

pInsertOid = connection.prepareStatement(INSERT_OID_SQL, Statement.RETURN_GENERATED_KEYS);

onde pInsertOid é uma declaração preparada.

então você pode obter a chave:

// fill in the prepared statement and
pInsertOid.executeUpdate();
ResultSet rs = pInsertOid.getGeneratedKeys();
if (rs.next()) {
  int newId = rs.getInt(1);
  oid.setId(newId);
}

Espero que isso lhe dá um bom ponto de partida.

Outras dicas

A resposta de extraneon, embora correta, não funciona para a Oracle .

A maneira como você fazer isso para Oracle é:

String key[] = {"ID"}; //put the name of the primary key column

ps = con.prepareStatement(insertQuery, key);
ps.executeUpdate();

rs = ps.getGeneratedKeys();
if (rs.next()) {
    generatedKey = rs.getLong(1);
}

Você já tentou o Statement.executeUpdate () e Statement.getGeneratedKeys () métodos? Há um developerWorks artigo que menciona a abordagem.

Além disso, no JDBC 4.0 Sun acrescentou o recurso row_id que lhe permite obter um identificador exclusivo em uma fileira. O recurso é suportado pela Oracle e DB2. Para o SQL Server, você provavelmente vai precisar de um driver de terceiros, como esta .

Boa sorte!

para Oracle, Hibernate usa NEXT_VALUE de uma seqüência, se você mapeou uma seqüência para a geração de valor PKEY.

Não sei o que ele faz para MySQL ou servidor MS SQL

Spring fornece algum apoio útil para este operação e o guia de referência parece responder à sua pergunta:

Não há uma maneira padrão único para criar uma adequada PreparedStatement (que explica por que a assinatura do método é a maneira que é). Um exemplo que funciona no Oracle e pode não funcionar em outras plataformas é ...

Eu testei este exemplo no MySQL e funciona lá também, mas eu não posso falar para outras plataformas.

Para bancos de dados que estejam em conformidade com SQL-99, você pode usar colunas de identidade: CRIAR sometable TABLE (id INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 101) PRIMARY KEY, ...

Use () para recuperar a chave que acabou de ser inserido com executeUpdate (string sql, autoGeneratedKeys int) . Use Statement.RETURN_GENERATED_KEYS para segundo parâmetro para executeUpdate ()

Apenas declarar coluna id como chave primária id inteiro não NULL auto_increment

após este executar esse código

ResultSet ds=st.executeQuery("select * from user");
                while(ds.next())
                {

                 ds.last();
                System.out.println("please note down your registration id  which is "+ds.getInt("id"));
                }
                ds.close();

O código acima irá mostrar-lhe da linha atual id

Se você remover ds.last() que ele irá mostrar todos os valores da coluna id

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top