Java 将查询中的位作为准备语句中的参数传递

Java 将查询中的位作为准备语句中的参数传递,java,postgresql,jdbc,prepared-statement,Java,Postgresql,Jdbc,Prepared Statement,我想在Prepared语句中传递一个位作为参数之一。我的查询应该如下所示: query = select * from tbl_security_details('user',O::BIT) 我将这个问题定义为: query = select * from tbl_security_details(?,?) PreparedStatement ps = connection.prepareStatement(query); ps.setString(1,"user") ps.setString

我想在Prepared语句中传递一个位作为参数之一。我的查询应该如下所示:

query = select * from tbl_security_details('user',O::BIT)
我将这个问题定义为:

query = select * from tbl_security_details(?,?)
PreparedStatement ps = connection.prepareStatement(query);
ps.setString(1,"user")
ps.setString(2,"0::BIT")
但是,这会抛出一个错误


有人能解释一下,我如何从prepare语句中传递0::BIT,而不让它自己附加一个引号并转换为字符串吗?

编写prepared语句,使转换成为查询的一部分:

String query = "select * from tbl_security_details(?, ?::bit)";
java.sql.PreparedStatement ps = connection.prepareStatement(query);
ps.setString(1, "user");
ps.setString(2, "0");

这是必要的,因为您只能将常量值传递给准备好的语句,而不能传递SQL表达式。

为什么不使用
布尔值呢。未工作“未工作”既不是有效的Java错误,也不是有效的Postgres错误消息(使用布尔值显然也需要在数据库中使用适当的布尔值,而不是误用一点布尔值标志)您是否尝试过使用
setInt(2,0)
?是的。setInt(2,0)和setBoolean(2,false)都会导致Postgres错误