我和我的团队遇到了一个问题。我们试图从 Sybase IQ 数据库中检索一些数据,并使用where
子句过滤掉并获取特定数据。
SQL 已经过测试并且工作正常,但在使用准备语句时失败。
测试完成:
如果我们运行查询(有或没有 where 子句参数),它工作正常。
如果我们使用在 Prepared Statement 中硬编码的参数运行查询,它也可以正常工作。
如果我们以编程方式设置准备好的语句的参数,它是行不通的。
上述测试确认 JDBC 连接工作正常。
使用 PreparedStatement、JdbcTemplate 或 NamedParameterJdbcTemplate 时也会出现同样的错误,因此我怀疑 PreparedStatement 和 Sybase IQ 之间可能存在问题。
谁能帮忙调查一下?我们已经找到了一个解决方法,但了解为什么它不起作用会非常有用。
我发现了非常相似的线程(How do I execute PreparedStatement(select object_id()) in sybase iq?)关于同一问题,但没有人在那里提供可接受的正确答案,所以我决定为此创建一个新问题。
使用的代码是:
Class.forName("com.sybase.jdbc4.jdbc.SybDriver");
PreparedStatement stmt = con.prepareStatement("select * from myView where off = ? and acc = ?");
stmt.setString(1, "260");
stmt.setString(2, "9050V");
ResultSet set = stmt.executeQuery();
错误信息是:
Exception in thread "main" java.sql.SQLException: JZ0SA: Prepared Statement: Input parameter not set, index: 0.
at com.sybase.jdbc4.jdbc.SybConnection.getAllExceptions(Unknown Source)
at com.sybase.jdbc4.jdbc.SybStatement.handleSQLE(Unknown Source)
at com.sybase.jdbc4.jdbc.SybStatement.sendQuery(Unknown Source)
at com.sybase.jdbc4.jdbc.SybPreparedStatement.sendQuery(Unknown Source)
at com.sybase.jdbc4.jdbc.SybStatement.executeQuery(Unknown Source)
at com.sybase.jdbc4.jdbc.SybPreparedStatement.executeQuery(Unknown Source)
使用的 JDBC 驱动程序(Maven 依赖项):
<dependency>
<groupId>com.sybase</groupId>
<artifactId>jconn4</artifactId>
<version>7.0</version>
</dependency>
拉丁的传说
慕标5832272
MM们
相关分类