JDBC PreparedStatement用?对于Columnname不起作用

时间:2018-05-12 09:23:09

标签: java sql jdbc

在大学任务中,我使用JDBC访问数据库。我编写了一个finder方法,可以通过任何具有整数值的列中的任何值查找表中的对象。

public ResultSet findSampleByAnyCol(String colName, Integer sampleId, Connection con) {
    ResultSet rs = null;
    String sql = "SELECT * FROM sample WHERE ? = ?"; 

    try(PreparedStatement pstmt = con.prepareStatement(sql)) {
        pstmt.setString(1, colName);
        pstmt.setInt(2, sampleId);
        rs = pstmt.executeQuery();          

    }catch(SQLException e) {
        e.printStackTrace();
    }

    return rs;
  }

我测试了它,我确定问题是"?"因为colum nname不起作用。堆栈跟踪表示"无效的数字"。但是,如果我将SQL语句更改为SELECT * FROM sample WHERE sampleid = ?,它可以正常工作。

1 个答案:

答案 0 :(得分:0)

刚刚找到答案here,这是不可能的。 “?”只是为了价值观。要拥有变量列名,使用自己的字符串操作是不可避免的。