JAVA - 插入DB问题

时间:2010-08-11 19:54:44

标签: java database odbc

我遇到了将数据插入数据库的问题。它正在返回插入1行,但是当我实际检查数据库时,实际上没有插入任何新内容。

这是我的更新功能:

public int update(String sqlStatement) {
    int rows = 0;
    try {
        Statement st = this.conn.createStatement();
        rows = st.executeUpdate(sqlStatement);
        this.conn.commit();
        st.close();
            } catch (Exception err) {
        System.out.println("Got err doing update: " + err.getMessage());
    }   
    return rows;
}

这是通过它的对象调用它的函数:

            db = new Database();
            int rows = 0;
            String sql = "INSERT INTO tblStudent (firstName, lastName, username, password, isAdmin) ";
         sql += String.format("VALUES ('%s', '%s', '%s', '%s', %d)", fName, lName, username, passwd, isAdmin);
            System.out.println("Trying " + sql);
            if((rows = db.update(sql)) == 0) {
                System.out.println("Could not create new user");
                throw new Exception();
            }
            System.out.println("Rows " + rows);

正如我所说,它报告了一行插入到数据库中,但实际上没有任何内容。 DB是MS Access DB。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

好的,解决了问题。

似乎你必须关闭连接。即使没有被重用。

我将以下函数添加到Database类:

    public void close() {
    try {
        this.conn.close();
    } catch (Exception err) {
        System.out.println("Error while closing connection: " + err.getMessage());
    }
}

然后在finally子句中添加了对其他函数的接近:

        try {
            db = new Database();
            int rows = 0;
            String sql = "INSERT INTO tblStudent (firstName, lastName, username, password, isAdmin) ";
            sql += String.format("VALUES ('%s', '%s', '%s', '%s', %d)", fName, lName, username, passwd, isAdmin);
            System.out.println("Trying " + sql);
            if((rows = db.update(sql)) == 0) {
                System.out.println("Could not create new user");
                throw new Exception();
            }
            System.out.println("Rows " + rows);
        } catch (Exception err) {
            System.out.println("Got err in registerUser: " + err.getMessage());
            return false;
        } finally {
            db.close();
        }

让我想知道为什么甚至可以选择提交,因为它实际上并没有提交,即使你已经告诉它提交。