再次出现了一个很大的last_insert_id()问题

时间:2010-06-06 09:37:02

标签: sql jdbc

注意 - 这是我的问题: JDBC: Does the connection break if i lose reference to the Connection object?

现在我已经创建了一个类,所以我可以轻松地处理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()

如果我想在调用add()之后获取插入记录的ID,那会怎么样:

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

是否可能在这两个语句之间调用另一个add()?

2 个答案:

答案 0 :(得分:1)

可能......您可能需要考虑重构代码。

Baby关闭连接之前,在add方法中的变量中检索并存储id,更改签名并返回id。

答案 1 :(得分:0)

只要您保持连接打开,在语句之间执行另一个添加并不重要。 last_insert_id函数获取在同一数据库会话中创建的最后一个ID,即使用相同的连接。

因此,您必须更改您的代码,以便您不必关闭并重新打开添加记录和获取ID之间的连接。