【发布时间】:2013-11-27 05:11:29
【问题描述】:
我正在尝试使用准备好的语句使用 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 项目运行脚本,则不会更新任何内容,也不会生成错误。
有问题的 db 表有 4 列:(int)project_id、(nvarchar)project_name、(int)num_bugs、(int)num_features
谁能帮我解决这个问题和/或找出问题所在?
【问题讨论】:
-
不应该查询是 SET COLUMN_NAME = ?....
-
@Nambari 是对的。您的 SQL 语句应该有错误。您不能将列(或表)名称作为参数传递。
-
另外,最好关闭你准备好的语句,最好在
finally块中。
标签: java sql sql-server jdbc