gpt4 book ai didi

java - 如何为 Oracle CHAR 字段设置 JDBCPreparedStatement 参数?

转载 作者:行者123 更新时间:2023-12-01 17:58:14 24 4
gpt4 key购买 nike

我认为我的 Oracle JDBC 准备语句遗漏了一些明显的内容。我正在尝试创建一个从 TABLE 中选择列 APreparedStatement ,其中 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"));

现在这不起作用,我目前得到 java.sql.SQLException: Result set after last row 因为 ResultSet 为空。

但是,这有效:

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 = '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>

B 定义为 CHAR(50)

这是来自 Oracle 的一些调试信息

select
s.sql_text,
bc.position,
bc.value_string
from v$sql s
left join v$sql_bind_capture bc
on bc.sql_id = s.sql_id
and bc.child_number = s.child_number
where
s.sql_text like 'SELECT A%'
order by s.sql_id, bc.position;

带输出

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

最佳答案

除了@LppEdd答案之外,您还可以执行此操作来设置参数:

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

关于java - 如何为 Oracle CHAR 字段设置 JDBCPreparedStatement 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42950355/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com