DBF文件是一种数据库文件,可用于记录数据库中的数据。
比较简单的文法是用plSQL导入,方法:工具--ODBC导入器---dBase File---选择文件----导入。
这里我讲解的是用JAVA代码来导入数据 ,原理是使用javadbf包的DBFReader类解析DBF文件,并转换成SQL语句执行。
第一步获取所有字段信息,生成保存所有字段的字符串,格式:(id,name,sex)
第二步依次读取每一行数据 ,并将每一行的数据生成一条SQL语句字符串,字符串格式:insert into table(id,name,sex) values('1','王二','男')
最后连接数据库,依次放入到Statement批处理堆中,并执行操作。
用到了二个类,数据连接类:
public class DBConnection { /** * 驱动类 */ public static String drive = "oracle.jdbc.driver.OracleDriver"; /** * 连接驱动符 */ public static String url = "jdbc:oracle:thin:@localhost:1521:orcl"; /** * 用户名 */ public static String username = "max"; /** * 密码 */ public static String password = "max"; public static Connection getConnection(){ try { Class.forName(drive); return DriverManager.getConnection(url, username, password); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } /** * 关闭数据库 * @param rs 返回结果记录集 * @param pst 执行sql操作 * @param con 建立连接 */ public static void close(ResultSet rs,Statement pst,Connection con){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(pst!=null){ try { pst.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if(con!=null){ try { con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } } } }
DBF导入类:
public class DbfImport { private String table;//表格名称; private StringBuffer params;//记录表格各字段 private StringBuffer values;//记录每一行数据 private List sql;//记录所有行的数据 private static Connection con = null; private static Statement stm = null; private static ResultSet res = null; public DbfImport() { // TODO Auto-generated constructor stub table ="score"; params = new StringBuffer("("); values = new StringBuffer("("); sql = new ArrayList<String>(); } public void impOracle(String path) throws ClassNotFoundException, IOException, SQLException{ InputStream fis = null; //读取文件的输入流 fis = new FileInputStream(path); //根据输入流初始化一个DBFReader实例,用来读取DBF文件信息 DBFReader reader = new DBFReader(fis); //设置字符集,避免中文乱码 reader.setCharactersetName("GBK"); //获取dbf数据字段数量 int fieldsCount = reader.getFieldCount(); String fieldName; for( int i=0; i<fieldsCount; i++) { //依次获取字段名称 DBFField field = reader.getField(i); fieldName = field.getName(); //连接每个字段名称 params.append(fieldName+","); } params.deleteCharAt(params.length()-1); params.append(")"); Object[] rowValues; for(int i=0;(rowValues = reader.nextRecord()) != null;i++) { for( int j=0; j<rowValues.length; j++) { if(rowValues[j] == null) values.append("null"+","); else values.append("'"+rowValues[j].toString().trim()+"',"); } values.deleteCharAt(values.length()-1); values.append(")"); //生成插入语句字符串 sql.add("insert into "+table+params.toString()+" values"+values.toString()); //重置每一行的数据 values.delete(0, values.length()); values.append("("); } //传递插入语句,导入数据 dbf_Import(sql); //关闭输入流 fis.close(); //关闭数据库连接 DBConnection.close(null, stm, con); } public void dbf_Import(List sql) throws SQLException{ //打开数据库连接 con = DBConnection.getConnection(); stm = con.createStatement(); int i=0; for(;i<sql.size();i++){ //将sql语句加入批处理中 stm.addBatch((String)sql.get(i)); } //执行批处理 stm.executeBatch(); } public static void main(String[] args) throws SQLException, ClassNotFoundException, IOException { DbfImport dbf = new DbfImport(); //DBF文件路径 String path ="D:/test/score.DBF"; dbf.impOracle(path); } }
友情提示:
1.代码中只考虑了关系表字段全是varchar2的情况,更规范的操作是读取字段信息时调用DBFField类实例的getDataType()获取字段的类型,用LinkedHashMap类来保存,因为LinkedHashMap能保证插入与读取数据的一致性,键保存字段数据,值保存字段数据类型,并在生成SQL插入语句时,根据字段数据类型,相应的转换字符串格式,如number型不加单引号,varchar2型加单引号等。
2.原本的想法我是打算用Cglib动态创建类对象的,表格字段作为类对象的属性,然后用get方法获取数据生成插入语句的,后面想想其实也没有必要遍历一遍生成类对象集合,再遍历一遍去创建SQL语句,效率太低,然后就被我pass了。
相关推荐
执行上述命令后, ogr2ogr 将解析SHP文件并将其转换为Oracle Spatial兼容的数据,然后通过数据库连接将数据插入到指定的表中。 6. **验证与后处理**: 导入完成后,通过SQL查询验证数据是否正确导入,并进行必要...
在给定的“Database_Interface.rar”压缩包中,包含了一个能够帮助用户将Excel(.xls)和FoxPro(.dbf)文件的数据便捷地导入Oracle数据库的工具。这个接口简化了数据迁移的过程,对于需要处理大量结构化数据的...
在现代软件开发中,尽管关系型数据库管理系统(RDBMS)如MySQL、SQL Server和Oracle等更为流行,但在处理某些特定的历史数据或者轻量级的数据存储时,DBF文件仍然有其使用场景。 要读取DBF文件,首先需要了解几个...
如果涉及到文件的解密,需要使用相应的工具或方法解密后再进行转换。 6. **数据验证**:转换完成后,务必验证导入的数据是否完整无误,这包括检查数据的数量、数据类型的一致性以及数据的完整性约束。 在进行此类...
根据提供的文件信息,我们可以归纳出一系列与Oracle数据库相关的知识点,主要涵盖了表空间管理、用户管理、数据查询以及基本的SQL操作等内容。以下是对这些知识点的详细解析: ### 一、表空间管理 #### 创建表空间...
2. `.dbf`文件:这是一个数据库文件,存储了与几何对象相关的属性数据。它采用dBASE格式,包含字段定义和记录数据,每个形状几何对象对应一条记录。 3. `.shx`文件:是形状文件索引,存储了形状记录的物理位置,...
Java中处理DBF文件并不常见,因为大多数现代应用程序倾向于使用更先进、更强大的数据库系统如MySQL、PostgreSQL或Oracle。然而,这个程序可能为那些需要与遗留系统集成或者处理老式数据的开发者提供了便利。 在...
Druid支持多种数据库,如MySQL、Oracle等,并且内置了SQL解析器,可以提供SQL执行计划分析。 2. **poi-3.10.1-20140818.jar**:Apache POI是一个用于处理Microsoft Office格式文档的Java库,如Excel(XLS、XLSX)、...
调用数据库存储过程步骤用于调用数据库中的存储过程,支持多种数据库类型,如Oracle、MySQL、PostgreSQL、SQL Server等,可以用于处理复杂逻辑或事务处理。 **9.6.22 HTTP客户端(HTTPCient)** HTTP客户端步骤...