Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL错误42883-使用从字符串转换的整数时未定义函数_Postgresql_Jdbc - Fatal编程技术网

PostgreSQL错误42883-使用从字符串转换的整数时未定义函数

PostgreSQL错误42883-使用从字符串转换的整数时未定义函数,postgresql,jdbc,Postgresql,Jdbc,显然, Select Message From "public".USERS Where ID = '1' 这是一份完美的法律声明。 也是如此 事实上,它们是一样的。两者之间的唯一区别是,第二个是最初 Select Message From "public".USERS Where ID = ? 并使用ID值1参数化 事实上,当我试图对要执行的语句进行硬编码时,一切都运行得很好,并且我收到了预期的输出 通过测试,我发现问题实际上是,如果参数最初是字符串,则没有问题。因此: Prepare

显然,

Select Message From "public".USERS Where ID = '1' 
这是一份完美的法律声明。
也是如此

事实上,它们是一样的。两者之间的唯一区别是,第二个是最初

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的字符串也会导致错误。

当你说第二个查询“是一个PreparedStatement的结果,该语句用ID值1参数化了”您的意思是在指定参数值后,您对
PreparedStatement
对象执行了
toString
?一些JDBC驱动程序允许它显示“有效”的SQL语句,但它们也可能具有欺骗性,因为发送到服务器的可能并不完全是这些语句。您可以尝试在服务器上登录(请参阅)以查看实际接收到的内容,以及您稍后描述的场景之间是否存在差异。我无法在Windows上使用postgresql 9.6.5中的“postgresql-42.1.4.jre7.jar”重现您的问题。您可能希望您的问题包括您正在使用的PostgreSQL和JDBC驱动程序的版本,以及运行应用程序的平台。看起来您的
ID
列是一个
varchar
/
text
-在查询中强制转换如何,例如:
SELECT*FROM table WHERE ID=?::text
String param = Integer.toString(1);
String param = String.valueOf(1);
String param = ""+1;