Sql 即使PreparedStatement正在关闭,也要使用clearParameter()
以上是给定的InsertInDB方法, 它有一个InsertPS PreparedStatement对象。 在这里,即使我在方法末尾关闭InsertPS对象,也必须使用clearParameters方法。 我提供了一个单独的方法来关闭连接对象 还有另一个问题:在类中的任何方法之外创建PreparedStatement对象,使用构造函数初始化,例如,使用不同方法中的所有对象后,使用单独的方法关闭所有PreparedStatement对象,这是一个好主意吗Sql 即使PreparedStatement正在关闭,也要使用clearParameter(),sql,jdbc,connection,resultset,Sql,Jdbc,Connection,Resultset,以上是给定的InsertInDB方法, 它有一个InsertPS PreparedStatement对象。 在这里,即使我在方法末尾关闭InsertPS对象,也必须使用clearParameters方法。 我提供了一个单独的方法来关闭连接对象 还有另一个问题:在类中的任何方法之外创建PreparedStatement对象,使用构造函数初始化,例如,使用不同方法中的所有对象后,使用单独的方法关闭所有PreparedStatement对象,这是一个好主意吗 private PreparedState
private PreparedStatement InsertPS = null;
public boolean InsertInDB(String username, String password, double balance, String secret) {
boolean ans = false;
try {
InsertPS = con.prepareStatement("Insert into BankDB values(?,?,?,?)");
String data[] = AMC.SendtoDB(password, secret);
InsertPS.setString(1, data[0]);
InsertPS.setString(2, username);
InsertPS.setString(3, data[1]);
InsertPS.setDouble(4, balance);
int rows = InsertPS.executeUpdate();
if (rows != 0) {
ans = true;
}
InsertPS.clearParameters();
} catch (SQLException sqlInite) {
System.out.println("SQL Error in InsertInDB method: " + sqlInite);
} finally {
try {
InsertPS.close();
} catch (SQLException sqle) {
System.out.println("SQL Exception in InsertInDB method finally clause : " + sqle);
}
}
return ans;
}
欢迎对代码的其他方面提出建议或批评。对于第一个问题,当您致电:
public class JavatoDB {
Driver DM = null;
Connection con = null;
PreparedStatement InsertPS = null;
PreparedStatement BalancePS = null;
PreparedStatement DeletePS = null;
PreparedStatement UpdatePS = null;
PreparedStatement SearchDB = null;
ResultSet RS = null;
ResultSetMetaData RSMD = null;
AdminControl AMC = null;
public JavatoDB() {
AMC = new AdminControl();
try {
DM = new com.mysql.jdbc.Driver();
con = DriverManager.getConnection("jdbc:mysql://localhost/javadb", "java", "javaaccess");
InsertPS = con.prepareStatement("Insert into BankDB values(?,?,?,?)");
BalancePS = con.prepareStatement("Select BALANCE from BankDB where ACCNAME=? AND ACCPIN = ?");
DeletePS = con.prepareStatement("Delete from BankDB where ACCNAME = ? AND ACCPIN = ? ");
UpdatePS = con.prepareStatement("Update BankDB set BALANCE = (BALANCE + ?) where ACCNAME = ? AND ACCPIN = ?");
SearchDB = con.prepareStatement("Select ID AND ACCPIN from BankDB where ACCNAME = ? ");
} catch (SQLException JavatoDBContrsuctor) {
System.out.println("SQL Error in JavatoDBConstructor: " + JavatoDBContrsuctor);
}
}
public boolean InsertInDB(String username, String password, double balance, String secret) {
boolean ans = false;
try {
String data[] = AMC.SendtoDB(password, secret);
InsertPS.setString(1, data[0]);
InsertPS.setString(2, username);
InsertPS.setString(3, data[1]);
InsertPS.setDouble(4, balance);
int rows = InsertPS.executeUpdate();
if (rows != 0) {
ans = true;
}
InsertPS.clearParameters();
} catch (SQLException sqlInite) {
System.out.println("SQL Error in InsertInDB method: " + sqlInite);
}
return ans;
}
一个新的preparedStatement被创建,然后参数就不存在了,我的意思是你不需要清除它
关于第二个问题,在您的实现中,我看不到在哪里关闭preparedStatement,如果只添加close,下次方法将失败。然后,通常创建preparedStatement并用相同的方法关闭它
con.prepareStatement()