java - 准备好的语句,字符串卡在引号中

标签 java jdbc postgresql-9.3

我一直试图弄清楚为什么我准备好的语句在字符串之前和之后放置 ' 。当我尝试将此代码用于 Postgressql 数据库服务器时,出现语法错误。这是因为该程序处理代码如下:

假设我按如下方式调用此方法:

selectStringQuery("username", "users", "id", 1);

然后程序返回以下准备好的语句:

SELECT 'username' FROM 'users' WHERE 'id' = 1;

运行程序时出现以下错误:

org.postgresql.util.PSQLException: ERROR: syntax error at or near "$2"
Position: 16

它应该产生这样的结果:

SELECT username FROM users WHERE id = 1;

有人可以告诉我我在这里缺少什么吗?

 * Executes a select query.
 * @param selectFieldName
 * @param tableName
 * @param conditionFieldName
 * @param conditionValue
 * @return 
 */public String selectStringQuery(String selectFieldName, String tableName, String conditionFieldName, int conditionValue){
    try {
        // *** Start execution of query ***
        query = "SELECT ? FROM ? WHERE ? = ?;";
        preparedStatement = prepareStatement(query);
        preparedStatement.setString(1, selectFieldName);
        preparedStatement.setString(2, tableName);
        preparedStatement.setString(3, conditionFieldName);
        preparedStatement.setInt(4, conditionValue);
        System.out.println(preparedStatement);
        resultSet = preparedStatement.executeQuery();
        // *** End execution of query ***

        // *** Start validity checks ***       
        if(!resultSet.next()){
            System.out.println("Query did not return any results.");
            return null;
        }
        // *** End validity checks ***

        // *** Start process query results ***
        String result = resultSet.getString(selectFieldName);
        return result;
        // *** End process query results ***
    } catch (Exception ex) {
        System.out.println(ex);
        return null;
    }
}

最佳答案

尝试在查询字符串中连接表名和列名。

query = "SELECT "+selectFieldName+" FROM "+tableName+" WHERE "+conditionFieldName+" = ?;";

我认为您不能将表名和列名作为参数传递。参数将被视为列值,并将 '' 添加到其中

关于java - 准备好的语句,字符串卡在引号中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29917253/

相关文章:

java - LiveData、Transformations.map() - 如何在用户更改过滤顺序时强制刷新?

java - 如何打印出将发送到 oracle 的 sql 查询

postgresql - 将数据插入强规范化数据库并保持完整性(Postgres)

java - Hibernate 的映射问题

java - 在 Android 应用程序中将原始图像替换为新图像

java - 如何获取当前选择的项目名称?

java - 运行 Hadoop DbCountPageView.java

java - 计算余弦相似度

ruby-on-rails - 在 Rails 3.2 中修改 Postgres JSON 字段时出错

java - 使用了错误的 JDBC 驱动程序?