Como obter auto-generated keys em uma classe Java

Aprenda nesta dica como criar auto-generated keys através da API JDBC.

Como obter auto-generated keys em uma classe Java

As bases de dados fornecem uma característica de auto-incremento que é usado geralmente para IDs. JDBC API tem também um método para buscar o último ID gerado.

O exemplo abaixo gera um ID e usa-o para atualizar a coluna de uma tabela.

import java.sql.*;

<B><SPAN lang=EN-US >public class </SPAN></B><SPAN lang=EN-US >testKeys </SPAN>
<SPAN lang=EN-US >{</SPAN>
<B><SPAN lang=EN-US >public static void </SPAN></B><SPAN lang=EN-US >main(String[] args) </SPAN>
<SPAN lang=EN-US >{</SPAN>
<SPAN lang=EN-US >DB db = </SPAN><B><SPAN lang=EN-US >new </SPAN></B><SPAN lang=EN-US >DB();</SPAN>
<SPAN lang=EN-US >Connection conn =<BR>            </SPAN>
<SPAN lang=EN-US >db.dbConnect(</SPAN><SPAN lang=EN-US >"jdbc:jtds:sqlserver://localhost:1433/tempdb"</SPAN><SPAN lang=EN-US >,</SPAN><SPAN lang=EN-US >"sa"</SPAN><SPAN lang=EN-US >,</SPAN><SPAN lang=EN-US >""</SPAN><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >db.performKeys(conn);</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >}</SPAN>

<B><SPAN lang=EN-US >class </SPAN></B><SPAN lang=EN-US >DB</SPAN>
<SPAN lang=EN-US >{</SPAN>
<B><SPAN lang=EN-US >public </SPAN></B><SPAN lang=EN-US >DB() {}</SPAN>

<B><SPAN lang=EN-US >public </SPAN></B><SPAN lang=EN-US >Connection dbConnect(String db_connect_string, </SPAN>
<SPAN lang=EN-US >String db_userid,String db_password)</SPAN>
<SPAN lang=EN-US >{</SPAN>
<B><SPAN lang=EN-US >try</SPAN></B>
<SPAN lang=EN-US >{</SPAN>
<SPAN lang=EN-US >Class.forName(</SPAN><SPAN lang=EN-US >"net.sourceforge.jtds.jdbc.Driver"</SPAN><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >Connection conn = DriverManager.getConnection(</SPAN>
<SPAN lang=EN-US >db_connect_string, db_userid, db_password);</SPAN>
<SPAN lang=EN-US >System.out.println(</SPAN><SPAN lang=EN-US >"conectado"</SPAN><SPAN lang=EN-US >);</SPAN>
<B><SPAN lang=EN-US >return </SPAN></B><SPAN lang=EN-US >conn;</SPAN>

<SPAN lang=EN-US >}</SPAN>
<B><SPAN lang=EN-US >catch </SPAN></B><SPAN lang=EN-US >(Exception e)</SPAN>
<SPAN lang=EN-US >{</SPAN>
<SPAN lang=EN-US >e.printStackTrace();</SPAN>
<B><SPAN lang=EN-US >return null</SPAN></B><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >}</SPAN>

<B><SPAN lang=EN-US >public void </SPAN></B><SPAN lang=EN-US >performKeys(Connection conn)</SPAN>
<SPAN lang=EN-US >{</SPAN>
<SPAN lang=EN-US >String query;</SPAN>
<SPAN lang=EN-US >PreparedStatement pstmt;</SPAN>

<B><SPAN lang=EN-US >try</SPAN></B>
<SPAN lang=EN-US >{</SPAN>
<SPAN lang=EN-US >query = </SPAN><SPAN lang=EN-US >"insert into customer (name,category) "</SPAN><SPAN lang=EN-US >+</SPAN>
<SPAN lang=EN-US >"values ('name1','temp')"</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >pstmt = conn.prepareStatement(query, </SPAN>
<SPAN lang=EN-US >Statement.RETURN_GENERATED_KEYS);</SPAN>

<SPAN lang=EN-US >pstmt.executeUpdate();</SPAN>
<SPAN lang=EN-US >ResultSet keys = pstmt.getGeneratedKeys();</SPAN>

<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >count = </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >;</SPAN>

<SPAN lang=EN-US >keys.next();</SPAN>
<B><SPAN lang=EN-US >int </SPAN></B><SPAN lang=EN-US >key = keys.getInt(</SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >);</SPAN>

<SPAN lang=EN-US >query =</SPAN><SPAN lang=EN-US >"update customer set age =? where id =?"</SPAN><SPAN lang=EN-US >;</SPAN>
<SPAN lang=EN-US >pstmt = conn.prepareStatement(query);</SPAN>
<SPAN lang=EN-US >pstmt.setFloat(</SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >, </SPAN><SPAN lang=EN-US >26</SPAN><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >pstmt.setInt(</SPAN><SPAN lang=EN-US >2</SPAN><SPAN lang=EN-US >, key);</SPAN>
<SPAN lang=EN-US >pstmt.executeUpdate();</SPAN>

<SPAN lang=EN-US >keys.close();</SPAN>
<SPAN lang=EN-US >pstmt.close();</SPAN>
<SPAN lang=EN-US >conn.close();</SPAN>

<SPAN lang=EN-US >}</SPAN>
<B><SPAN lang=EN-US >catch </SPAN></B><SPAN lang=EN-US >(Exception e)</SPAN>
<SPAN lang=EN-US >{</SPAN>
<SPAN lang=EN-US >e.printStackTrace();</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >}</SPAN>

<SPAN lang=EN-US >};</SPAN>

Artigos relacionados