我一直在想为什么我准备的声明 '
在我的琴弦前后。当我尝试将此代码用于我的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;
}
}
3条答案
按热度按时间wdebmtf21#
尝试在查询字符串中包含表名和列名。
我认为不能将表名和列名作为参数传递。参数被视为列值和
''
添加到它们中wz1wpwve2#
你可以试试这样的
8fq7wneg3#
参数不能用于参数化表或任何数据库对象。它们主要用于参数化where/having子句。