import java.sql.*;public class Demo
{
public static void main(String[] args)
{
ResultSet result;
Connection con = null;
String[] connectionString = new String[2];
connectionString[0] = "UPDATE Customers SET Password=?,Name=? WHERE Email = ?";
connectionString[1] = "UPDATE Addresses SET Address = " + "dream"+ ",Country = " + "chian" + ",PhoneNumber = "+"888-8888"+",Fax = " +"234 WHERE PKId = 3";
try
{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
con = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;databaseName=Duwamish7", "sa", "");
}
catch(Exception e)
{
e.printStackTrace();
}
try
{
con.setAutoCommit(false);

PreparedStatement updateCustomer =con.prepareStatement(connectionString[0]);
updateCustomer.setString(1,"8887");
updateCustomer.setString(2,"angel");
updateCustomer.setString(3,"[email protected]");

updateCustomer.executeUpdate();
System.out.println("OK");

updateCustomer.execute(connectionString[1]);

PreparedStatement updateAddress =con.prepareStatement(connectionString[1]);
updateAddress.
updateAddress.setString(1,"qingdao");
updateAddress.setString(2,"CH11na");
updateAddress.setString(3,"878-4444");
updateAddress.setString(4,"444-8888");
updateAddress.setInt(5,3);


updateAddress.executeUpdate();

System.out.println("OK");
    con.commit();
    con.setAutoCommit(true);
    
con.close();
}
catch( Exception errr )
{
errr.printStackTrace();
try
{
con.rollback();
}
catch(Exception ee)
{
ee.printStackTrace();
}


}

}
}我这个程序中总是提示不能克隆数据库联接,不知道是为什么,如果想用带数的STEAMENT来实现事务应该怎么样实现,谢谢

解决方案 »

  1.   

    记得关闭已经使用完的ResultSet和Statement
    updateCustomer.execute(connectionString[1]);
    后调用 
    updateCustomer.close();updateAddress.executeUpdate();
    后调用
    updateAddress.close();就应该可以了
      

  2.   

    import java.sql.*;public class Demo
    {
    public static void main(String[] args)
    {
    ResultSet result;
    Connection con = null;
    String[] connectionString = new String[2];
    connectionString[0] = "UPDATE Customers SET Password=?,Name=? WHERE Email = ?";
    connectionString[1] = "UPDATE Addresses SET Address = ?,Country =?, PhoneNumber = ?,Fax = ?WHERE PKId = ?";
    try
    {
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
    con = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;databaseName=Duwamish7", "sa", "");
    }
    catch(Exception e)
    {
    e.printStackTrace();
    }
    try
    {
    con.setAutoCommit(false);

    PreparedStatement updateCustomer =con.prepareStatement(connectionString[0]);
    updateCustomer.setString(1,"8887");
    updateCustomer.setString(2,"angel");
    updateCustomer.setString(3,"[email protected]");

    updateCustomer.executeUpdate();
    System.out.println("OK");

    updateCustomer.execute(connectionString[1]);

    PreparedStatement updateAddress =con.prepareStatement(connectionString[1]);
    updateAddress.
    updateAddress.setString(1,"qingdao");
    updateAddress.setString(2,"CH11na");
    updateAddress.setString(3,"878-4444");
    updateAddress.setString(4,"444-8888");
    updateAddress.setInt(5,3);


    updateAddress.executeUpdate();

    System.out.println("OK");
        con.commit();
        con.setAutoCommit(true);
        
    con.close();
    }
    catch( Exception errr )
    {
    errr.printStackTrace();
    try
    {
    con.rollback();
    }
    catch(Exception ee)
    {
    ee.printStackTrace();
    }


    }

    }
    }这个是正确的代码,请大家看看
      

  3.   

    大家来帮帮忙呀,我很着急,关键是那个CON的重新转向好象有问题大家帮帮忙