簡體   English   中英

getBytes()使用ResultSet但不使用CachedRowSet

[英]getBytes() working with ResultSet but not CachedRowSet

我有一個Derby SQL數據庫,其中有一個表,其中包含一個需要包含序列化對象的blob字段。 我通過JDBC訪問它。 問題是,當我使用ResultSet反序列化對象時,一切正常,但是如果使用CachedRowSet,則會出現“數據類型不匹配”異常。

這是一些有效的代碼:

ResultSet rs = stmt.executeQuery();
rs.next();
byte[] buf = rs.getBytes("albero");

這是替代位

CachedRowSet crs = null;
ResultSet rs = stmt.executeQuery();
crs = RowSetProvider.newFactory().createCachedRowSet();
crs.populate(rs);
crs.next();    
byte[] buf = crs.getBytes("albero"); 

誰能幫助我了解為什么這種不同的行為? 謝謝

CachedRowSet (假設參考實現com.sun.rowset.CachedRowSetImpl )將數據副本存儲在緩存行集中的ResultSet中。 它使用提供給populate的結果集的getObject方法執行此操作。

如您所指出的那樣,列是一個Blob,我假設getObject將返回一個Blob並且元數據中的列類型是BLOB而不是字節數組(類型VARBINARYLONGVARBINARY )。 因此,即使原始結果集支持,緩存的行集也僅允許您以Blob而不是byte[]檢索列。

JDBC 4.2規范(附錄B.6)描述了哪些類型支持哪些方法,而BLOB僅支持getBlob (和getObject )。 但是,與規范中的要求相反,許多驅動程序都比較寬松,並且還支持BLOB getBytesgetBinaryStream 在這方面, CachedRowSetImpl對JDBC的解釋更為嚴格。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM