ResultSet can not re-read row data for column

今天在寫程序的時候發現了一個很奇怪的問題“ResultSet can not re-read row data for column”,用google一搜,原來是微軟公司的驅動的兼容性不太好。 

有前輩(作者無從考究故只好統一尊稱前輩)總結了微軟驅動的缺點:

(1)如果採用jdbc-odbc驅動,那麼就必須按照查詢順序來一次讀取(不論有沒有image或text類型)
(2)如果採用微軟提供的ms sql server jdbc driver,如果查詢語句中,不存在image或text類型字段,那麼可以按照無序獲取
(3)如果採用微軟提供的ms sql server jdbc driver,如果查詢語句中,存在image或text類型字段,那麼就必須按照順序讀取,否則就會報告Driver]ResultSet can not re-read row data for column之類的錯誤
(4)如果想不查詢語句中有沒有image或text類型字段,都可以不按照順序獲取,或重複獲取。那麼就必須更換驅動,改用第三方的。

     因爲不相信 ms 會有這種漏洞,所以抱着懷疑的態度用自己的程序試驗了下。我把我項目的數據庫字段類型text 型 改爲了varchar型,然後再執行程序,發現程序已經可以正常運行,呵呵~原來上面說的是對的。

       找到問題所在了,於是着手開始解決問題。我的項目不允許我修改數據庫字段類型的,所以上面那種方法是行不通的,於是我考慮用vector來存儲resuleset結果集 ,因爲它可以重複取值,但是這個方法也不行,因爲我不知道該如何下手去更改那個繁瑣的程序;再然後... 我看到有人通過修改sql 語句來解決這個問題,於是我也把我的 select * from... 中的 * 改爲了依次寫出各個字段的字段名,果然問題也解決了,但是這個方法對於我的程序來說也是不可取的,因爲我是想把這個程序寫成一個公用的方法,所傳遞的參數當然越少越好,我總不能把所有的字段名當成參數來傳遞吧……

       無奈之下 , 我只好去尋找第三方驅動,第三方驅動是高手們爲了滿足某種程序需要,而把原來微軟提供的驅動程序做一些修改,比如修改參數,打開一些保守的配置 ....  我不知道這樣我的系統會不會安全,但是用了,問題也解決了~  那麼在沒有發現危險前,也只好這樣了先~

     需要第三方驅動,可以加QQ:505809863 (因爲不會弄下載~ ,只好這樣了~ ) 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章