import java.sql.Connection ; import java.sql.DriverManager ; import java.sql.ResultSet ; import java.sql.SQLException ; import java.sql.Statement ; /** * Program to illustrate problem with Statement.getGeneratedKeys() * after a REPLACE command. * */ public class Main { static void printGeneratedKeys (int test, Statement s) throws SQLException { ResultSet rs = s.getGeneratedKeys () ; System.out.println ("\nTest " + test) ; while (rs.next ()) { int k = rs.getInt (1) ; System.out.println ("Key generated =" + k) ; } rs.close () ; } static void printTable (Statement s) throws SQLException { ResultSet rs = s.executeQuery ("select k, v from genkey") ; System.out.println ("\nTable contents ") ; while (rs.next ()) { System.out.println ("Key " + rs.getInt (1) + " Val " + rs.getString (2)) ; } rs.close () ; } public static void main (String[] args) { try { // Ensure that the jdbc driver is loaded System.out.println ("\nStart") ; Class.forName ("com.mysql.jdbc.Driver").newInstance () ; Connection c = DriverManager.getConnection ("jdbc:mysql://localhost/test?user=root&password=") ; Statement s = c.createStatement () ; System.out.println ("\nSet up") ; s.execute ("create table genkey(k int auto_increment primary key, v varchar(10))") ; // Test 1 s.execute ("REPLACE into genkey(v) values ('five'), ('six')") ; printGeneratedKeys (1, s) ; printTable (s) ; // Test 2 s.execute ("REPLACE into genkey(k, v) values (1,'one'), (2,'two')") ; printGeneratedKeys (2, s) ; printTable (s) ; // Test 3 s.execute ("REPLACE into genkey(k, v) values (10,'ten'), (20,'twenty')") ; printGeneratedKeys (3, s) ; printTable (s) ; System.out.println ("\nClean up") ; //s.execute ("drop table genkey") ; s.close () ; c.close () ; } catch (Exception e) { System.out.println ("Caught exception") ; e.printStackTrace () ; } } }