UPDATE PreparedStatement不使用JDBC更新MSSQL

时间:2013-11-26 21:07:34

标签: java sql sql-server jdbc

我正在尝试使用预处理语句使用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);
    }
}

第一个print语句打印出正确的值,所以我知道输入是正确的,第二个print语句让我知道1行是受影响的,这是正确的。

如果我在Management Studio中运行脚本,脚本运行正常并更新表,但是如果我从java项目运行脚本,则不会更新任何内容,也不会生成任何错误。

有问题的db表有4列:(int)project_id,(nvarchar)project_name,(int)num_bugs,(int)num_features

任何人都可以帮助我解决这个问题吗和/或发现错误吗?

2 个答案:

答案 0 :(得分:2)

您不能以这种方式绑定列名,只能绑定变量。

我建议您关闭PreparedStatement块中方法范围中的finally。你的方式是要求麻烦。

我还打电话给System.out写一个非常糟糕的主意。我更愿意将受影响的行数返回给用户。

答案 1 :(得分:1)

无法在预准备语句中参数化列名。您只能参数化字符串或数字等文字值。