2010-06-06 55 views
0

注意 - 这在这里如下我的问题:JDBC: Does the connection break if i lose reference to the Connection object?大LAST_INSERT_ID()的问题,再次

现在我有一个创建一个类,所以我可以应付JDBC容易为我的代码的其余部分 -

public class Functions { 
    private String DB_SERVER = ""; 
    private String DB_NAME = "test"; 
    private String DB_USERNAME = "root"; 
    private String DB_PASSWORD = "password"; 

    public Connection con; 
    public PreparedStatement ps; 
    public ResultSet rs; 
    public ResultSetMetaData rsmd; 

    public void connect() 
      throws java.io.FileNotFoundException, java.io.IOException, 
      SQLException, Exception { 
     String[] dbParms = Parameters.load(); 

     DB_SERVER = dbParms[0]; 
     DB_NAME = dbParms[1]; 
     DB_USERNAME = dbParms[2]; 
     DB_PASSWORD = dbParms[3]; 

     // Connect. 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     con = DriverManager.getConnection("jdbc:mysql://" 
       + DB_SERVER + "/" 
       + DB_NAME, DB_USERNAME, DB_PASSWORD); 
    } 

    public void disconnect() throws SQLException { 
     // Close. 
     con.close(); 
    } 
} 

如图所示Parameters.load()每次都从文件中刷新连接参数,以便对下一次立即连接应用相同的更改。

这个类的一个实战例子 -

public static void add(String NAME) 
     throws java.io.FileNotFoundException, java.io.IOException, SQLException, Exception { 
    Functions dbf = new Functions(); 
    dbf.connect(); 

    String query = "INSERT INTO " + TABLE_NAME + "(" + 
      "NAME" + 
      ") VALUES(?)"; 
    PreparedStatement ps = dbf.con.prepareStatement(query); 
    ps.setString(1, NAME); 
    ps.executeUpdate(); 

    dbf.disconnect(); 
} 

现在,这里的问题是 - 添加一条记录上表中,add()方法将打开一个连接,添加记录 - 然后调用disconnect()

,如果我想插入记录的ID叫我以后add()样的:

Department.add("new dept"); 
int ID = getlastID(); 

是不是有可能其他加载()被调用这两个语句之间?

回答

1

这是可能的..你可能想考虑重构你的代码。

婴儿的步骤,检索和存储在你的add方法中的变量里面的id在关闭连接之前,更改签名并返回id。

+0

这就是我刚才的想法。 :) – Bojack 2010-06-06 09:43:49

0

只要保持连接处于打开状态,在语句之间是否执行另一个添加无关紧要。 last_insert_id函数获取在同一数据库会话中创建的最后一个id,即使用相同的连接。

所以,你必须改变你的代码,这样你才能关闭并重新打开添加记录和获取id之间的连接。