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();
