我现在实现一个功能,在java类中用一个方法从sql server中导出一些信息到foxpro的dbf文件中,连接后,插入记录都可以,可是不知道如何删除dbf文件里面的记录,另外,我想插入一个图片到dbf文件中,是general数据类型,不知道如何实现?恳请高手赐教。
下面是我的程序:
        try
        {
            CommFunction cmf = new CommFunction();
            String filePath = request.getSession().getServletContext().
                                 getRealPath("/") + "Reserve\\MiddleEmp\\";
            Connection dbfconn = null;
            try
            {
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
                String url = "jdbc:odbc:DRIVER={MICROSOFT FOXPRO VFP DRIVER (*.DBF)};SourceType=DBF;SourceDB=";
                url += filePath;
                dbfconn = DriverManager.getConnection(url);
            }catch(Exception ex)
            {
                System.err.println("数据库连接过程中出现错误!");
                rtnCode = 2;
            }
            if(dbfconn != null)
            {
                Statement stmtQue = conn.createStatement();
                Statement stmtIns = dbfconn.createStatement();
                ResultSet rs = null;
                String empCode = "", tmpVal = "", delSql = "", insertSql = "", frontSql = "", backSql = "";
                int i = 0, j = 0;                //先清除原有记录
                  //这里我这么写不起作用
                  delSql = "delete from hbgbku";
                stmtIns.executeUpdate(delSql);                String strsql = "select col005 as 工号, col006 as 姓名 from tableempbase order by col005";
                //一共写入19个字段
                  frontSql = "insert into hbgbku(工号,姓名) values(";
                rs = stmtQue.executeQuery(strsql);
                //为了防止重复导入,先删除原有记录,再插入新记录
                while(rs.next())
                {
                    //每次循环时需要置为空
                    backSql = "";
                    empCode = cmf.IsNull(rs.getString("工号"));
                    backSql += "'" + empCode + "',";
                    backSql += "'" + cmf.IsNull(rs.getString("姓名")) + "')";
                    insertSql = frontSql + backSql;
                    stmtIns.addBatch(insertSql);
                    if(i == 100)
                    {
                        stmtIns.executeBatch();
                        stmtIns.clearBatch();
                        i = 0;
                    }
                    i++;
                }
                if(i > 0)
                    stmtIns.executeBatch();                if(rs != null)
                    rs.close();
                if(stmtQue != null)
                    stmtQue.close();
                 if(stmtIns != null)
                    stmtIns.close();
                if(dbfconn != null)
                    dbfconn.close();
            }
        }catch(Exception ex)
        {
            ex.printStackTrace();
        }

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【taijiquan】截止到2008-06-30 18:24:16的历史汇总数据(不包括此帖):
    发帖数:0                  发帖分:0                  
    结贴数:0                  结贴分:0                  
    未结数:0                  未结分:0                  
    结贴率:-------------------结分率:-------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    用ADO操作DBF库,执行了DELETE命令后我发现DBF中的记录只是加了删除标记,并没有彻底的删除,这也不是ADO的错,而是foxpro的问题,foxpro本身删除就是打删除标记,而不是彻底删除。这个问题我也一直想解决,但是没有好办法。目前我所得到的答案是:直接用文件操作,打开DBF文件,剔除要删除的记录,重新写一个,这太麻烦了,所以我不用foxpro了。
    不过你也可以这样,你可以把一个空的dbf文件放到resource中,需要的时候释放出来覆盖老的dbf文件。