我正在尝试使用准备好的语句使用 JDBC 更新 MSSQL 实例,我创建了一个方法来在给定列名、要更新的值和更新后的值时更新表中的任何记录。
public void updateProjectOptions(int projectID, int number, String column){
try {
PreparedStatement ps = conn.prepareStatement("UPDATE cryptic.dbo.projects SET ? = ? WHERE project_id = ?");
int newNum = number+1;
System.out.println(projectID+" "+newNum+" "+column);
ps.setString(1, column);
ps.setInt(2, newNum);
ps.setInt(3, projectID);
int debug = ps.executeUpdate();
System.out.println("Rows affected: "+debug);
} catch (SQLException ex) {
Logger.getLogger(DAL.class.getName()).log(Level.SEVERE, null, ex);
}
}
第一个打印语句打印出正确的值,所以我知道输入是正确的,第二个打印语句让我知道有 1 行受到影响,这是正确的。
如果我在 Management Studio 中运行脚本,脚本运行良好并更新表,但如果我从 java 项目运行脚本,则不会更新任何内容,也不会生成任何错误。
有问题的数据库表有 4 列:(int)project_id、(nvarchar)project_name、(int)num_bugs、(int)num_features
谁能帮我解决这个问题和/或发现问题所在?
最佳答案
您不能以这种方式绑定(bind)列名,只能绑定(bind)变量。
我建议您在 finally
block 的方法范围内关闭该 PreparedStatement
。你的做法是自找麻烦。
我还认为写入 System.out
是一个非常糟糕的主意。我更愿意将受影响的行数返回给用户。
关于java - UPDATE PreparedStatement 不使用 JDBC 更新 MSSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20227974/