山高岳小,水落石出

blog重建工作基本完成

导航

Blog统计

公告

1.关注java,关注web开发,关注互联网,关注企业信息化

2.关注实时绘制技术,关注光照技术,关注阴影技术

3.关注投资理财,关注企业管理,关注创业项目









文章

收藏

相册

my blog

存档


正在读取评论……

因为客户使用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


[点击此处收藏本文]  发表于2004年10月09日 10:30 AM




正在读取评论……
大名
网址
验证码
评论