我一直试图弄清楚为什么我准备好的语句在字符串之前和之后放置 '
。当我尝试将此代码用于 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/