java - 即使在蟾蜍中运行时相同的查询返回一行,准备好的语句也不起作用

标签 java sql prepared-statement toad

我正在尝试使用preparedStatement从数据库中获取一行,代码如下所示:

PreparedStatement preparedStatement = null;
Connection con = new Connection ()  //pseudo Code added here
String query = "select * from abc where a=? and b=? and c=?";

preparedStatement = con.prepareStatement(query);

preparedStatement.setString(1,"x");

preparedStatement.setString(2,"y");

preparedStatement.setString(3,String.valueOf('Z'));

ResultSet resultset = preparedStatement.executeQuery();

if(resultset.next() == false)
{
  throw new exception("No records fetched");
}

但是通过 TOAD 执行以下查询时,会返回一行:

select * from abc where a='x' and b='y' and c='z';

我在这里做错了什么? (where子句中的第三个条件是一个字符)。

最佳答案

这两个查询是不同的,在您发出的 TOAD 中

select * from abc where a='x' and b='y' and c='z'

而根据您准备好的声明,您所做的相当于:

select * from abc where a='x' and b='y' and c='Z'

zZ

不同

您不需要在 setParameter 中将 Oracle CHAR 参数指定为 Java char,因此更改

preparedStatement.setString(3,String.valueOf('Z'));

到任一

preparedStatement.setString(3,"z");

preparedStatement.setString(3,String.valueOf('z'));

可能会起作用。

关于java - 即使在蟾蜍中运行时相同的查询返回一行,准备好的语句也不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9717597/

相关文章:

java.lang.UnsupportedOperationException : No couch port for cache buckets

php - 我是否需要联接才能从此表中检索信息?

php - 如何将更新的CKEditor内容保存到数据库?

java - 使用预处理语句设置表名

java - JDBC - 如何在准备好的语句中设置 char

java - 如何使用Java向测试计划中的测试用例添加参数?

java - 运行时出现StackOverflow错误

java - 应为 BEGIN_OBJECT 但为带有自定义 TypeAdapter 的 STRING

mysql - SQL 连接多个表并按单列排序

php - 绑定(bind) boolean 值的 bind_param 问题