java+access开发显得有点不伦不类,但是由于在需要从老系统中将数据库access中的数据逐条导入到新系统的MySQL数据库中,所以采取了最基础的有保证的一种方式:java Web系统中采用jdbc-odbc桥读取access的文本和备注的对应字段,然后逐条写入MySQL新数据库表中。
以前用jdbc-odbc桥读取access的时候用的很少,也没有注意过此问题,此次导入数据的过程中无意发现竟然有些标题不全,也就是从access文本和备注字段中读取出来的文本信息不完全!
刚开始以为是access的限制问题,经过逐步测试发现是使用resultSet.getObject(“XXX”)方法时读取出来的字段就有缺少的部分,查询了不少相关资料,发现有个解决办法:
String tmpTitle=resultSet.getObject("Title")).toString(); String tmpTitle2=""; Log.debug("首次读取:"+tmpTitle+"); boolean ifEnd=true; while (ifEnd) { try { tmpTitle2=resultSet.getObject("Title").toString(); } catch (Exception e) { ifEnd=false; tmpTitle2=""; } tmpTitle+=tmpTitle2; } Log.debug("最终获得:"+tmpTitle);如上代码,也就是多次读取同一个字段,然后连接到一起组成一个新字段的方式,发现可行。但是就是如果Title字段内容过程的话,耗时太长。
于是,再仔细查询和研究原理,又找到一个貌似可行的方式,就是采用resultSet.getBinaryStream("XXX")方法获取,然后再转换一次。代码如下:
String tmpTitle=IOUtils.toString(resultSet.getBinaryStream("Title")); //其中IOUtils.toString()方法调用的是org.apache.commons.io.IOUtils包中的方法调试发现,某些行可以顺利读取和转换,但是遇到某些access备注字段的就会抛出异常,不知何故。
//需要引用org.apache.commons.io.output.ByteArrayOutputStream包中内容 int ii = -1; //org.apache.commons.io.output.ByteArrayOutputStream InputStream iStream=rSet.getBinaryStream("Content"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); while ((ii = iStream.read()) != -1) { baos.write(ii); } String tmpContent = baos.toString();