Java 如何为Oracle字符字段设置JDBC PreparedStatement参数?

Java 如何为Oracle字符字段设置JDBC PreparedStatement参数?,java,oracle,jdbc,Java,Oracle,Jdbc,我想我在Oracle JDBC准备的声明中遗漏了一些明显的东西。我试图创建一个PreparedStatement,从表中选择列a,其中B是参数。例如,这也是我对测试代码的总结: Class.forName("oracle.jdbc.driver.OracleDriver"); final Connection connection = DriverManager.getConnection(<Oralce JDBC connection stuff>); final Prepared

我想我在Oracle JDBC准备的声明中遗漏了一些明显的东西。我试图创建一个PreparedStatement,从表中选择列a,其中B是参数。例如,这也是我对测试代码的总结:

Class.forName("oracle.jdbc.driver.OracleDriver");
final Connection connection = DriverManager.getConnection(<Oralce JDBC connection stuff>);
final PreparedStatement findStatement = connection.prepareStatement("SELECT A FROM TABLE WHERE B = ?");

findStatement.setString(1, "TEST");

final ResultSet results = findStatement.executeQuery();
results.next();

System.out.println(results.getString("A"));
注意我是如何用字符串硬编码WHERE语句的

我有什么明显的遗漏吗

我的maven依赖项定义为:

<dependency>
  <groupId>com.oracle.jdbc</groupId>
  <artifactId>ojdbc7</artifactId>
  <version>12.1.0.2</version>
 </dependency>
有输出

SQL_TEXT                             | Position                       | Value_String
SELECT A FROM TABLE WHERE B = :1     | 1                              | TEST
SELECT A FROM TABLE WHERE B = 'TEST' | <null>                         | <null>

由于字段的定义是CHAR50,我认为您应该用空格填充字符串。

由于字段的定义是CHAR50,我认为您应该用空格填充字符串。

除了@LppEdd answer,您还可以这样设置参数:

((OraclePreparedStatement)findStatement).setFixedCHAR(1, "TEST");

除了@LppEdd answer外,您还可以执行以下操作来设置参数:

((OraclePreparedStatement)findStatement).setFixedCHAR(1, "TEST");

可能是因为在第一个版本中,你在搜索文本,而在第二个版本中,你在搜索测试。@Erik L,如果上面的说法是正确的,那么这是一个大错误+如果@kayaman所说的是真的,那么这就是你通过几个小时的工作中断来解决的问题,哈哈,对不起!在我的例子中,这是一个拼写错误,我已经纠正了。这一点都不好玩,你只是让问题变得更难。然而,代码似乎是相当标准的JDBC。我无法想象这是司机的错会是一个相当大的错误。可能是因为在第一个版本中,你在搜索文本,在第二个版本中,你在搜索测试。@Erik L,如果上面的说法是真的,那么这是一个大错误+如果@kayaman所说的是真的,那么这就是你通过几个小时的工作中断来解决的问题,哈哈,对不起!在我的例子中,这是一个拼写错误,我已经纠正了。这一点都不好玩,你只是让问题变得更难。然而,代码似乎是相当标准的JDBC。我无法想象这是司机的错会是一个相当大的错误。在火焰中…这是有效的!findStatement.SetString,String.format%1$-50s,测试;呃…那太…可怕了。远离查尔的另一个理由。在火焰中……这是有效的!findStatement.SetString,String.format%1$-50s,测试;呃…那太…可怕了。另一个远离CHAR的原因。
((OraclePreparedStatement)findStatement).setFixedCHAR(1, "TEST");