java - UPDATE PreparedStatement 不使用 JDBC 更新 MSSQL

标签 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);
    }
}

第一个打印语句打印出正确的值,所以我知道输入是正确的,第二个打印语句让我知道有 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/

相关文章:

.net - 表值参数性能问题

php - 如何在php中将计算列添加到mysql查询结果中?

java - 如何使用 JPA API 构造此连接查询?

java - Gradle:多项目依赖:同名任务一起执行

java - 如何根据条件更新原子?

sql - 如何将 postgres 函数重用于触发器和一般用途

mysql - 如何通过一次查询从另一个表的数据更新一个表的所有行字段?

java - MethodVisitor 抛出 ClassFormatError

sql - 为什么此查询会导致 TABLE ACCESS FULL 而不是 FULL INDEX SCAN?

sql - 查找一个月内的不同记录