DBMNG数据库管理与应用

才能是来自独创性。独创性是思维、观察、理解和判断的一种独特的方式。
当前位置:首页 > Access > 常见问题

java Web开发中用jdbc-odbc桥读取access的文本和备注字段不完全的问题解决方案

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







本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by DEVSOARTECH            豫ICP备11002312号-2

豫公网安备 41010502002439号