Access 字段类型:【备注】 使用 getString() 读取字段内容是错误的!!!
最近写一个小项目,用到 Access 数据库,其中有一个【表】的字段(body)类型是【备注】,用于存储比较多的文本。
我当时直接使用的 String body = rs.getString("body")
当时测试的时候没发现什么问题,随着字段 body 的内容越来越多时,发现每次读取字段值,只能取得部分数据,数据被截断了。
经过一个晚上的折腾,终于找到原因。
如果 Access 数据库的表的字段类型是【备注】,不能使用 rs.getString() 来读取,当字段值的长度达到一定长度时,rs.getString() 返回的数据会出现不完整,截断的问题。
解决方案:使用 rs.getBinaryStream()
InputStream is = rs.getBinaryStream("body"); ByteArrayOutputStream baos = new ByteArrayOutputStream(8192 * 2); int count; byte[] data = new byte[8192]; try { while ((count = is.read(data)) != -1) { baos.write(data, 0, count); } is.close(); } catch (IOException e) { e.printStackTrace(); System.exit(0); // 退出 } String body = new String(baos.toByteArray(), Charset.forName("gbk"));
参考资料:
java Web开发中用jdbc-odbc桥读取access的文本和备注字段不完全的问题解决方案: https://www.dbmng.com/art-2176.html
使用Java Web对Access数据库的备注字段操作问题: https://blog.csdn.net/softwave/article/details/5500130