JAVA解析DBF文件导入到Oracle数据库中
来源:互联网 发布:英汉互学软件 编辑:程序博客网 时间:2024/05/21 14:49
DBF文件是一种数据库文件,可用于记录数据库中的数据。
比较简单的文法是用plSQL导入,方法:工具--ODBC导入器---dBase File---选择文件----导入。
这里我讲解的是用JAVA代码来导入数据 ,原理是使用javadbf包的DBFReader类解析DBF文件,并转换成SQL语句执行。
第一步获取所有字段信息,生成保存所有字段的字符串,格式:(id,name,sex)
第二步依次读取每一行数据 ,并将每一行的数据生成一条SQL语句字符串,字符串格式:insert into table(id,name,sex) values('1','王二','男')
最后连接数据库,依次放入到Statement批处理堆中,并执行操作。
用到了二个类,数据连接类:
DBF导入类:
友情提示:
1.代码中只考虑了关系表字段全是varchar2的情况,更规范的操作是读取字段信息时调用DBFField类实例的getDataType()获取字段的类型,用LinkedHashMap类来保存,因为LinkedHashMap能保证插入与读取数据的一致性,键保存字段数据,值保存字段数据类型,并在生成SQL插入语句时,根据字段数据类型,相应的转换字符串格式,如number型不加单引号,varchar2型加单引号等。
2.原本的想法我是打算用Cglib动态创建类对象的,表格字段作为类对象的属性,然后用get方法获取数据生成插入语句的,后面想想其实也没有必要遍历一遍生成类对象集合,再遍历一遍去创建SQL语句,效率太低,然后就被我pass了。
比较简单的文法是用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 blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.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 blocke.printStackTrace();}finally{if(pst!=null){try {pst.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(con!=null){try {con.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.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 stubtable ="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了。
1 0
- JAVA解析DBF文件导入到Oracle数据库中
- DBF文件导入到oracle尝试
- 将DBF文件导入到其它数据库
- dbf文件导入到SqlServer中
- 将VF的dbf文件导入到oracle数据库的方法
- dbf文件数据导入数据库
- 怎么把DBF文件导入到SQL SERVER 2000中?
- 大批量数据导入数据库,dbf导入oracle,csv导入oracle
- 将DBF文件导入Sqlserver数据库
- 将XML文件导入到Oracle数据库中
- 将Excel文件导入到Oracle数据库中
- 将数据库的SQL脚本文件导入到oracle中
- 怎样把dmp文件导入到oracle数据库中
- ORACLE中用PLSQLj将.DMP文件导入到数据库中
- 通过java导入csv文件到oracle(mysql)数据库
- 读取oracle数据表,导出到DBF文件。
- Oracle dbf文件转移到其他目录
- Oracle数据库DBF文件误删除解决方案
- WKWebView与JS交互实战技巧之API介绍
- BNUOJ-24431-Crossed ladders
- 数据帧和网络编址
- leetcode——309——Best Time to Buy and Sell Stock with Cooldown
- 编写高质量的代码,从命名入手
- JAVA解析DBF文件导入到Oracle数据库中
- vtk实战(四十一)——读取tif数据
- MD5加密
- 同一个C语言工程不同C文件之间的函数互相调用问题(一)
- 【模板】tarjan
- 基于Boost方法的人脸检测(1):整体思路
- android中ActionBar详解
- 【模板】后缀数组
- Intellij IDEA 14.1.4安装详细图解与注册方法