显然,
Select Message From "public".USERS Where ID = '1'
是完全合法的陈述
是的Select Message From "public".USERS Where ID = '1'
事实上,它们是完全相同的。两者之间的唯一区别是第二个是最初
的PreparedStatement的结果Select Message From "public".USERS Where ID = ?
并使用ID值1进行参数化。
事实上,当我尝试对要执行的语句进行硬编码时,事情运行得非常好,并且我收到了预期的输出。
通过测试,我发现问题实际上是如果参数最初是一个字符串,则没有问题。所以:
PreparedStatement statement = connection.prepareStatement("Select * from table where ID = ?");
statement.setString(1, param);
如果param被声明为
,将会起作用String param = "1";
但是如果你以任何其他方式宣布它,那就不是了 例如,
String param = Integer.toString(1);
String param = String.valueOf(1);
String param = ""+1;
都会导致错误。
我完全不知道A)导致这种特殊错误的原因,以及B)为什么即使将int转换为具有完全相同的字符串值的字符串,也就是原来为int的字符串导致错误。