JAVA-插入数据库问题
我在将数据插入数据库时遇到问题。它返回一行被插入,但当我实际检查数据库时,实际上没有插入任何新的内容 以下是我的更新功能:JAVA-插入数据库问题,java,database,odbc,Java,Database,Odbc,我在将数据插入数据库时遇到问题。它返回一行被插入,但当我实际检查数据库时,实际上没有插入任何新的内容 以下是我的更新功能: public int update(String sqlStatement) { int rows = 0; try { Statement st = this.conn.createStatement(); rows = st.executeUpdate(sqlStatement); this.conn.co
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访问数据库
谢谢你的帮助
好的,解决了这个问题 看来你必须关闭连接。即使没有被重用 我向数据库类添加了以下函数:
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();
}
我想知道为什么会有提交选项,因为即使您告诉它提交,它实际上也不会执行提交。首先,使用prepare语句而不是手动连接。当您在该应用程序之外检查数据库时,应用程序连接是否已关闭?当使用此连接从应用程序执行SELECT查询时,数据是否存在?在执行插入之前,我执行SELECT,检查数据库中是否存在某些用户。此选择工作正常,正确地从同一个表中获取数据。RE:使用prepare语句。我知道还有其他方法可以做到这一点,但我想尝试并理解为什么这种方法不起作用。请注意,此代码容易受到SQL注入的攻击。使用包含单引号的FistName执行一个简单测试。您需要确保正在使用的db.update方法中运行的任何代码也正在关闭它正在使用的任何数据库资源。