我的代码中有一个循环。它迭代结果集。每当qc = 0
的值,它应该更新数据库中的表。
但它只是在第一次遇到qc = 0
时才更新数据库表。然后它就是从while循环中出来的。它不会用于下一次迭代来检查" qc"
String sql5 = "select t$pdno ,t$opno, t$qcmp , t$qtbf from ttisfc010100 where t$pdno = "+pdno+" and t$opno <= "+opno ;
ResultSet getData3 = db.getStmt().executeQuery(sql5);
while(getData3.next()) {
int pd , op , qc , qt ;
pd = getData3.getInt(1);
op = getData3.getInt(2);
qc = getData3.getInt(3);
qt = getData3.getInt(4);
String sql7="";
if(qc==0)
{
sql7 = "update ttisfc010100 set t$qcmp = "+quantity+" , t$qtbf = "+quantity+" where t$pdno = "+pd+" and t$opno = "+op;
db.getStmt().executeUpdate(sql7);
}
}
catch (SQLException e) {
e.printStackTrace(); }
getStmt()
方法包含创建普通语句的逻辑。见下文:
public class DatabaseConnection
{
Statement stmt;
public void openConnection() {
Class.forName(classForName);
conn = DriverManager.getConnection(driver+dsn, user, password);
stmt = conn.createStatement();
}
public Statement getStmt()
{
if(stmt==null)
{
stmt = this.getNewStmt();
}
return stmt;
}
public Statement getNewStmt() {
Statement newStmt;
try {
newStmt = conn.createStatement();
}
catch(Exception e){
newStmt = stmt;
}
return newStmt;
}
答案 0 :(得分:1)
我删除了Normal语句的用法,并在我的代码中使用了一个预准备语句。现在这解决了我的问题。
非常感谢。你的人很棒。
答案 1 :(得分:0)
问题是您重复使用相同的Statement
来在循环中执行第二个查询。当您对同一个Statement
对象执行新查询时,将关闭该同一对象上任何先前打开的语句,包括其结果集。
我有点惊讶你没有收到结果集关闭的SQLException
。
另请注意,像DatabaseConnection
这样的类有点奇怪,因为它使得正确管理JDBC资源变得更加困难,而不是更容易。