Jeg anvender MySQL standard 4.0.9 og alle tabeller er InnoDB. Driveren er den sidste nye 3-et-eller-andet developer-version. Koden:
package expnote;
import java.sql.*;
public class Test {
private static final int MAX_RECONNECTS = 3;
public Connection con = null;
public Test() {
open();
run(1, "dsj", "Hvordan gør man?", "Programmering : Java", "60", System.currentTimeMillis());
}
public boolean open() {
boolean success = false;
try {
if(con == null) {
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
con = DriverManager.getConnection("jdbc:
mysql://10.0.0.9/expnote2:3306" +"?user=root&password=280780"
+"&autoReconnect=true"
+"&maxReconnects="+MAX_RECONNECTS);
con.setTransactionIsolation(con.TRANSACTION_READ_COMMITTED);
success = true;
}
} catch (Exception exc) {
exc.printStackTrace();
}
return success;
}
public void run(int spmID, String creator, String title, String category, String points, long time) {
try {
String sql = "INSERT INTO question (spm_id,creator,title,category,points) VALUES(?, ?, ?, ?, ?);";
PreparedStatement prepStmt = con.prepareStatement(sql);
con.setAutoCommit(false);
prepStmt.setInt(1, spmID);
prepStmt.setString(2, creator);
prepStmt.setString(3, title);
prepStmt.setString(4, category);
prepStmt.setString(5, points);
try {
prepStmt.executeUpdate();
} catch (Exception sqle) {
sqle.printStackTrace();
}
sql = "INSERT INTO event (event_id,type,spm_id) VALUES(?, ?, ?);";
prepStmt = con.prepareStatement(sql);
prepStmt.setLong(1, time);
prepStmt.setString(2, "nqu");
prepStmt.setInt(3, spmID);
try {
prepStmt.executeUpdate();
} catch (Exception sqle) {
sqle.printStackTrace();
}
con.commit();
con.setAutoCommit(true);
} catch (Exception exc) {
exc.printStackTrace();
}
}
}
Jeg kan bare ikke genskabe den nævnte SQLException, men når prepStmt.executeUpdate(); er kørt på den første bliver den sendt til databasen, hvilket den jo ikke skal. Begge statements skulle gerne sendes til database ved con.commit(); og ikke ved prepStmt.executeUpdate();