因为客户使用vfp较为方便,所以我们现在要将oralce中心数据库中的数据导入dbf,然后通过页面发给客户,客户保存进行查看和备份。
问题出现在数据量较大的情况下。当该查询数据达到1万条以上的时候,该程序得到的dbf文件下载下来查看时就会出现诡异的错误,比如说数据重复,20000条数据下载下来可能是30000条,
再比如遗漏数据,比如20000条数据可能只有3000条,在有的客户端下载下来以后无法打开。
下面介绍一下实现。
网站是用jsp来做的,下载的功能是通过一个servlet来实现的,下面的代码是从oracle中查询数据,向dbf数据库中插入数据的方法。
public int insertDBF(HttpServletRequest request) {
String ora_sql="select A,B,C,D,E,F,..... from Table where Condition";
IDBOperate idbo = new IDBOperate();
DBOperate dbo = idbo.getDBOperate();
ResultSet rs = null;
try {
rs = dbo.getResultSet(ora_sql);
while (rs.next()) {
String sqlDBF = "insert into sbm (A,B,C,D,E,F,.....) values(?,?,?,?,?,?,......)";
HttpSession session = request.getSession(true);
String databaseDirectory = (String) session
.getAttribute("sv_DBPath");
Connection conn = null;
PreparedStatement stmt = null;
try {
String databaseDriverName = "com.hxtt.sql.dbf.DBFDriver";
Class.forName(databaseDriverName).newInstance();
String url = "jdbc:DBF:/" + databaseDirectory;
conn = DriverManager.getConnection(url, "", "");
stmt = conn.prepareStatement(sqlDBF);
stmt.setString(1, (rs.getString("A") == null ? "无" : rs.getString("A")));
stmt.setString(2, rs.getString("B")== null ? "无" : rs.getString("B"));
stmt.setString(3, rs.getString("C")== null ? "无" : rs.getString("C"));
stmt.setString(4, rs.getString("D")== null ? "无" : rs.getString("D"));
stmt.setString(5, rs.getString("E")== null ? "无" : rs.getString("E"));
stmt.setString(6, rs.getString("F")== null ? "无" : rs.getString("F"));
.......
.......
.......
stmt.execute();
} catch (Exception ex) {
Debug.println("Exception in sqlExecute");
ex.printStackTrace();
} finally {
try {
if (stmt != null) {
stmt.close();
}
} catch (Exception ex) {
Debug.println("Exception!");
ex.printStackTrace(System.out);
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
dbo.clear();
}
return 0;
}
现在我怀疑问题可能出现在以下几个点上:
1.ResultSet对于大数据量不可靠。我理解rs只是一个游标,那么当数据量大的时候,就可能造成混乱,从而引起上面讲的数据重复问题;
2.vfp数据库对于大数据量不可靠。数据少的时候并没有发现上述问题,当数据量大的时候同一个插入操作就有可能造成两条数据;
3.驱动程序不可靠。首先可能使vfp驱动的问题,数据量一旦大起来,同一个插入操作,可能执行了两次写dbf文件;也有可能是oracle驱动的问题,同前边的怀疑rs问题类似。
还有什么问题我就想不到了,请各位有经验的高手指点。
另外,这样的大数据量导出下载的问题,有什么好的方法解决么?
Trackback: http://tb.donews.net/TrackBack.aspx?PostId=124255