亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PreparedStatement 不適用于 Java 中的 Sybase IQ

PreparedStatement 不適用于 Java 中的 Sybase IQ

MMTTMM 2022-12-21 15:08:06
我和我的團隊遇到了一個問題。我們試圖從 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>
查看完整描述

3 回答

?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

我遇到了與 sybase iq 相同的問題。preparedStatement.execureQuery()我在聲明之前添加了以下兩行代碼來解決問題。


 preparedStatement.setFetchSize(Integer.MAX_VALUE);

 preparedStatement.setFetchDirection(ResultSet.FETCH_FORWARD);

不確定這樣做是否正確,但它奏效了。


要么


你可以設置 preparedStatement.setCursorName("SomeCursorName"); 這個也解決了這個問題。但在多線程環境中,您需要設置一個唯一的游標名稱??赡苷谑褂秒S機數或其他東西并且不要創建太多游標將它們限制為將同時執行的并發線程數。


查看完整回答
反對 回復 2022-12-21
?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

我使用了 jconn4 連接屬性 LITERAL_PARAMS=true 并且工作正常。小心,性能會受到影響。

當設置為“true”時,由 PreparedStatement 接口中的 setXXX 方法設置的任何參數都會在 SQL 語句執行時逐字插入。如果設置為“false”,則參數標記將保留在 SQL 語句中,并將參數值單獨發送到服務器。


查看完整回答
反對 回復 2022-12-21
?
MM們

TA貢獻1886條經驗 獲得超2個贊

stmt.setString(1, "260"); stmt.setString(2, "9050V");

數組索引從 0 開始不是嗎?在您使用的 API 中,它不是基于零的索引嗎?


查看完整回答
反對 回復 2022-12-21
  • 3 回答
  • 0 關注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號