Hello,

 I'm using classes in in org.geotools.data.shapefile.dbf package to
convert oracle table into dbf file. Problem is that some applications
such as openoffice can't read generated dbf file, only dbf headers are
shown without any rows.

 Did I miss something or is it a bug in
org.geotools.data.shapefile.dbf package that affects shapefile writing
too ?


thanks,
Jan

There's actual class :

import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

import org.geotools.data.shapefile.dbf.DbaseFileHeader;
import org.geotools.data.shapefile.dbf.DbaseFileWriter;

public class Oracle2Dbf {

    public void transform (String sqlstr, String j2EEDataSource,
String dbfFileName) {

    }

    public void transform (String sqlstr, Connection conn, String
dbfFileName) throws SQLException, IOException {

        Statement stmt = null;
        ResultSet rs = null;
        try {
            //conn = ds.getConnection();
            stmt = conn.createStatement();
            stmt.execute(sqlstr);
            rs = stmt.getResultSet();
            ResultSetMetaData mdata = rs.getMetaData();
            DbaseFileHeader header = new DbaseFileHeader();
            for (int col=1; col <= mdata.getColumnCount(); ++col) {
                String colType = mdata.getColumnTypeName(col);
                char type = 'C';
                int length = 0;
                int scale = mdata.getScale(col);
                if (colType.equals("NUMBER")) {
                    if (scale==-127) {
                        type = 'F';
                        length = 20;
                        scale = 2;
                    } else {
                        type = 'N';
                        length = 18;
                    }
                } else {
                    if (colType.equals("VARCHAR2")) {
                        type = 'C';
                        // length = 254;
                        length = mdata.getColumnDisplaySize(col);
                        if (length > 254)
                            length = 254;
                    } else {
                        if (colType.equals("DATE")) {
                            type = 'D';
                            length = 8;
                        }
                    }
                }
                header.addColumn(mdata.getColumnName(col), type, length, scale);
            }

            FileOutputStream os = new FileOutputStream(dbfFileName);
            DbaseFileWriter writer = new DbaseFileWriter(header,
os.getChannel());

            Object[] record = new Object[mdata.getColumnCount()];
            while (rs.next()) {
                for (int icol=1; icol <= mdata.getColumnCount(); ++icol) {
                    record[icol-1] = rs.getObject(icol);
                }
                writer.write(record);
                record[0]=null;
                record[1]=null;
                record[2]=null;
                record[3]=null;
            }
            writer.close();

        } finally {
            try {
                if (rs!=null)
                    rs.close();
                if (stmt!=null)
                    stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Geotools-gt2-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users

Reply via email to