我遇到了将数据插入数据库的问题。它正在返回插入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。
任何帮助表示感谢。
答案 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();
}
让我想知道为什么甚至可以选择提交,因为它实际上并没有提交,即使你已经告诉它提交。