java编写的语句,字符串卡在引号中

plicqrtu  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(267)

我一直在想为什么我准备的声明 ' 在我的琴弦前后。当我尝试将此代码用于我的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;
    }
}
wdebmtf2

wdebmtf21#

尝试在查询字符串中包含表名和列名。

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

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

wz1wpwve

wz1wpwve2#

你可以试试这样的

query = "SELECT "+selectFieldName+" FROM "+tableName+" WHERE "+selectFieldName+" = ?;"
8fq7wneg

8fq7wneg3#

参数不能用于参数化表或任何数据库对象。它们主要用于参数化where/having子句。

query = "select "+fieldName+" from "+tableName+" where "+conditionFieldName+" = ?;"
preparedStatement.setInt(1, conditionValue);

相关问题