2010-06-06 54 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之間的連接。