Java 如何为Oracle字符字段设置JDBC PreparedStatement参数?
我想我在Oracle JDBC准备的声明中遗漏了一些明显的东西。我试图创建一个PreparedStatement,从表中选择列a,其中B是参数。例如,这也是我对测试代码的总结: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
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");