import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.dbcp.BasicDataSource;
public class GeneratedKeys {
public static void main(String[] args)
{
String query =
"INSERT INTO DEMO (value) VALUES (?),(?),(?)";
List<String> queryParms = new ArrayList<String>();
queryParms.add("1");
queryParms.add("2");
queryParms.add("3");
GeneratedKeys k = new GeneratedKeys();
//Connect and execute with the connector:
// List<Integer> keys = k.executeQuery("org.mariadb.jdbc.Driver", query, queryParms);
List<Integer> keys = k.executeQuery("org.gjt.mm.mysql.Driver", query, queryParms);
System.out.println("");
System.out.println("****** Results ********");
System.out.println("Generated Keys: "+keys.toString());
}
public List<Integer> executeQuery(String driverName,String query, List<String> queryParms){
String serverName = "127.0.0.1";
String dbName = "DEMO";
String mysqlConnectionParams = "?useJvmCharsetConverters=true"
+ "&autoReconnect=true"
+ "&noDatetimeStringSync=true";
BasicDataSource DataSource = new BasicDataSource();
DataSource.setDriverClassName(driverName);
DataSource.setUsername("waveDB");
DataSource.setPassword("1179sia");
DataSource.setUrl("jdbc:mysql://" + serverName + "/" + dbName
+ mysqlConnectionParams);
try{
//Connect to the DB
System.out.println("Connecting to DB using connector: "driverName"...");
Connection conn = DataSource.getConnection();
//Execute the query
System.out.println("Executing Query...");
PreparedStatement stmt = conn.prepareStatement(query,
Statement.RETURN_GENERATED_KEYS);
for (int i = 0; i < queryParms.size(); ++i) {
if (queryParms.get
.getClass().equals(String.class))
{
stmt.setString(i + 1, (String) queryParms.get(i));
}
}
stmt.executeUpdate();
ResultSet result = stmt.getGeneratedKeys();
List<Integer> generatedKeys = new ArrayList<Integer>();
while (result.next())
{
generatedKeys.add(result.getInt(1));
}
conn.close();
stmt.close();
result.close();
return generatedKeys;
}
catch(Exception e)
{
e.printStackTrace();
}
finally{
try
{
System.out.println("Disconnecting from DB...");
DataSource.close();
}
catch (Exception ee)
{
ee.printStackTrace();
}
}
return new ArrayList<Integer>();
}
}
Could you attach a small but complete code example to illustrate your point? Single java class with main() is ok, but JUnit format is the best, since it will also illustrate what you're actually expecting with assertXXX.
If you're talking about multivalued inserts, MySQL cannot return all autogenerated keys for all values. Because it is not sent with the protocol.