关于Java数据库查询结果保存到DBF的小小总结^_^

来源:互联网 发布:怎么看淘宝店网址 编辑:程序博客网 时间:2024/06/05 16:46
    有用到JAVADBF包,但是有许多不适合的地方。自己有修改,先码这,下次看起来方便点。。。    `这里写代码片`另,DBF文件格式需了解。如,0x0D结束文件头,每行字段值以0x20开头,文件以0x1A结尾等等。

大致:

准备好列数、行数、每个字段长度,字段名以及字段类型

                    rs = stmt.executeQuery(sql);                    // 获得ResultSet的总行数                    rs.last();                    rowCount = rs.getRow();                    rs.beforeFirst();                    // 表的列数                ResultSetMetaData rsmd = rs.getMetaData();                    columnCount = rsmd.getColumnCount();                    columnName = new String[columnCount];                    fieldLength = new int[columnCount];                    columnData = new Object[columnCount];                    columnType = new String[columnCount];                    System.out.println(rowCount);                    System.out.println(columnCount);                    for (int i = 1; i <= columnCount; i++) {                        // 字段名                        columnName[i-1] = rsmd.getColumnName(i);                        // 字段长度                        fieldLength[i-1] = rsmd.getColumnDisplaySize(i);// *2??                        // rsmd.getColumnType(i);                        //字段类型                        columnType[i-1] = rsmd.getColumnTypeName(i);                        //test                        System.out.println(columnType[i-1]+"::"+fieldLength[i-1]);                    }MyUtils.writeDBF_Declar(filename+".DBF", columnCount,rowCount, fieldLength, columnName, columnType);//写文件头while (rs.next()) {    for (int i = 1; i <= columnCount; i++) {        // 字段数据        columnData[i-1] = rs.getObject(i);    }       MyUtils.writeDBF_Data(filename+".DBF", columnCount, fieldLength, columnName, columnType, columnData);//一行一行写入数据}MyUtils.writeEnd();//结尾
    架包以及其源码网上都可以找到,只是他是把数据一次性写入。若想从数据库里一行一行写入需稍作修改。另,其字段类型也是一个麻烦的问题。数据只支持Double。integer,float都报错,需转。    还有些小问题,如“BS”字段长度为1,Utils.textPadding(……)操作成0了,所以会有空白问题……先到这,具体问题只能继续断点跟踪了。。。
public static void writeDBF_Declar(String path, int columnCount,int rowCount,            int[] fieldLength, String[] columnName, String[] columnType) {        try {            // 定义DBF文件字段            DBFField[] fields = new DBFField[columnCount];            for (int i = 0; i < columnCount; i++) {                fields[i] = new DBFField();                fields[i].setName(columnName[i]);                fields[i].setFieldLength(fieldLength[i]);                //fields[i].setFieldLength(10);                 if (columnType[i].contains("CHAR")                        || columnType[i].contains("CLOB")) {                    fields[i].setDataType(DBFField.FIELD_TYPE_C);                }else if (columnType[i].contains("DATE")) {                    fields[i].setDataType(DBFField.FIELD_TYPE_D);                } else if (columnType[i].contains("NUMBER")                        || columnType[i].contains("INT")                        || columnType[i].contains("DECIMAL")                        || columnType[i].contains("REAL")) {                    fields[i].setDataType(DBFField.FIELD_TYPE_N);                } else if(columnType[i].contains("FLOAT")){                    fields[i].setDataType(DBFField.FIELD_TYPE_N);                    fields[i].setDecimalCount(2);                }else {                    fields[i].setDataType(DBFField.FIELD_TYPE_M);                }            }            writer = new DBFWriter(path);            // 把字段信息写入DBFWriter实例,即定义表结构            writer.setFields(fields,rowCount);        } catch (Exception e) {            e.printStackTrace();        }     }
public static void writeDBF_Data(String path, int columnCount,            int[] fieldLength, String[] columnName, String[] columnType,            Object[] columnData) throws Exception {            Object[] rowData = null;            rowData = new Object[columnCount];            for (int i = 0; i < columnCount; i++) {                if((columnData[i]!=null)&&columnType[i].equalsIgnoreCase("int")){                    int a = new Integer((Integer) columnData[i]);                    double temp = a;                    rowData[i] = temp;                }else if((columnData[i]!=null)&&columnType[i].equalsIgnoreCase("float")){                    float a = new Float((Float) columnData[i]);                    double temp = a;                    rowData[i] = temp;                }else if((columnData[i]!=null)&&columnType[i].equalsIgnoreCase("date")){                    Date a = new Date(0);                    a = (Date) columnData[i];                    rowData[i] = a;                }else{                    rowData[i] = columnData[i];                }            }            writer.addRecord(rowData);            // 写入数据            writer.write();    }    public static void writeEnd(){        try {            writer.writeEnd();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }
0 0
原创粉丝点击