com.microsoft.sqlserver.jdbc.SQLServerException: 不支援此資料指標類型/並行的組合。(The cursor type/concurrency combination is not supported.)
上網查了一下, 大概得到的答案是MS SQL Server 2005不支援 (TYPE_SCROLL_INSENSITIVE + CONCUR_UPDATABLE)組合。
納悶的是我明明已經將CachedRowSet物件設為 ( TYPE_SCROLL_INSENSITIVE , CONCUR_READ_ONLY)組合, 為何在setPageSize後會出現錯誤呢??
RowSet RI現行版本是non-Open Source的(在OPEN JDK7中才有公開原始碼), 所以Debug時真的不好抓出問題點。
通過些反編工具檢查原始碼, 才發現在CachedRowSetReader類別readData方法中有一段:
.......
if (cachedrowset.getPageSize() == 0) {
cachedrowset.populate(resultset);
} else {
preparedstatement = connection.prepareStatement(
cachedrowset.getCommand(), ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
..........
既然如此, 也就是說要解決此問題的話, 我們要建立自己的CachedRowSetReader和Provider類別並在實體化CachedRowSet物件時指定Provider。
另外建立一繼承CachedRowSetImpl物件override傳hashtable建構子在其內要生成SQLWarning及RowSetWarning給自己的成員,才不會照成NullPointException
沒有留言:
張貼留言