`
max1487
  • 浏览: 103385 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

JAVA解析DBF文件导入到Oracle数据库中

    博客分类:
  • java
阅读更多

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了。

 

 

0
2
分享到:
评论

相关推荐

    DBF格式的数据导入oracle的流程

    DBF(dBase 文件)是一种古老的数据库文件格式,曾经广泛应用于许多数据库管理系统中。现在,随着技术的发展和新的数据库管理系统的出现,DBF 格式的文件逐渐被淘汰。但是,在一些老系统中,DBF 文件仍然被广泛使用...

    用plsql将mdb文件导入到oracle数据库中

    - **定义**:MDB是Microsoft Access数据库文件的一种扩展名,常用于存储小型应用的数据。 - **特点**: - 支持多种数据类型,如文本、数字、日期等。 - 可通过ODBC等方式与其他数据库进行交互。 #### 2. Oracle...

    java解析dbf文件方案.pdf

    DBF 文件是一种常见的数据库文件格式,广泛应用于许多行业。为了读取和解析 DBF 文件,需要使用 Java 语言中的数据库连接和 SQL 语句。 在这个方案中,我们可以使用两种方法来解析 DBF 文件:一种是使用 ODBC 驱动...

    java解析dbf文件三种方法、以及解析驱动

    ### Java解析DBF文件的方法与解析驱动介绍 #### DBF文件简介 DBF(dBase File)是一种常用的数据文件格式,最初由dBase数据库应用程序创建并使用。它以表格形式存储数据,支持多种不同的数据库管理系统(DBMS)。...

    DBF数据导入oracle表处理方法

    DBF 数据关联 Oracle 数据处理方法是指将 DBF 文件导入到 Oracle 表中的过程。为了实现这个过程,需要正确创建 DBF 的 ODBC 数据源,然后使用 PL/SQL 导入 DBF 文件。 创建 DBF 的 ODBC 数据源 在 Windows 7 操作...

    dbf文件导入SQL server

    DBF是一种早期的数据库文件格式,常用于FoxPro、dBase等系统,而SQL Server是微软提供的一个强大、可靠的关系型数据库管理系统。C#作为.NET框架的主要开发语言,可以方便地处理这种数据迁移工作。 首先,要将DBF...

    DBF文件导入ORALCE方法

    DBF文件是一种基于Xbase结构的数据库文件,广泛用于早期的数据库管理系统中。在现代数据库系统如Oracle中,为了处理这些数据,我们需要采用特定的方法将它们导入。 以下是一个通过ODBC(Open Database Connectivity...

    读取.xls、.dbf文件信息并录入oracle数据库

    `.dbf`文件则是一种早期的数据库文件格式,常见于FoxPro、dBase等数据库管理系统。这两种文件都包含了结构化的表格数据,可以被各种软件读取和分析。 为了将`.xls`和`.dbf`文件的信息录入Oracle数据库,我们需要...

    dbf格式文件导入orcle

    3. **编程接口**: 对于熟悉编程的用户,可以使用PL/SQL、Python、Java等语言,通过ODBC或JDBC驱动程序连接Oracle数据库,编写程序读取DBF文件并插入到Oracle表中。 四、具体步骤 以"DBF to Oracle v1.0 英文版"为例...

    java快速导出几十万百万生成DBF文件数据后台内附有javadbf.jar

    在IT行业中,数据库文件格式多种多样,其中DBF(dBase File)是一种常见的数据库文件类型,尤其在处理历史数据或与旧系统交互时尤为常见。本文将深入探讨如何使用Java来快速导出大量数据到DBF文件,以及如何利用`...

    Oracle导出的dmp格式文件导入到达梦的操作步骤

    以上步骤提供了从Oracle数据库中导出的DMP格式的数据库文件再导入到达梦7数据库中的完整操作流程。在整个过程中,需要注意每一步的细节处理,特别是表空间的创建、用户的权限分配以及数据迁移工具的具体设置等。

    Java解析DBF文件

    Java解析某些DBF文件时喜欢出错误,错误一:Failed to parse Number: For input string: "-.---" , 错误二:有时候有些被标记为删除的数据读取不出来,已打成jar包

    java 实现DBF文件读取与创建

    DBF(dBase File)是一种常见的数据库文件格式,主要用于存储结构化数据。在Java中处理DBF文件,我们可以借助特定的库,如JDBF,它提供了读取和写入DBF文件的功能。本篇文章将深入探讨如何使用Java实现DBF文件的读取...

    oracle导出成dbf文件工具

    支持根据sql语句查询出的结果,导出到dbf文件中。要求是查询出的结果顺序,必须和dbf文件各个字段一一对应。 前提是必须提供dbf模板文件,以确定dbf文件各个字段的长度等信息。 目前支持10g,11g 的oracle client...

    Oracle11g 崩溃后-dbf数据库文件恢复

    当Oracle 11g数据库遭遇崩溃时,如何有效地恢复数据,特别是dbf(数据文件)变得尤为关键。Oracle 11g版本,即11.2.0,提供了多种恢复策略来应对这种情况。在这个过程中,log文件(redo logs)和ctl控制文件起着决定...

    DBF备份文件导入mssql数据库需要的驱动

    这里我们关注的是如何将DBF文件(一种常见的FoxPro或dBase格式的数据库文件)导入到Microsoft SQL Server (MSSQL)数据库中。在处理这种数据迁移时,"DBF备份文件导入mssql数据库需要的驱动"是一个关键知识点。 DBF...

    linux下向oracle中导入dmp文件

    在实际工作中,我们经常需要将 dmp 文件导入到 Oracle 数据库中。下面我们将详细介绍如何在 Linux 下向 Oracle 数据库中导入 dmp 文件。 首先,我们需要登录 Linux 系统,以 oracle 用户登录。如果我们以 root 用户...

    Oracle通过DBF恢复数据

    本文将详细介绍在没有备份的情况下,如何通过数据文件(DBF)来恢复Oracle数据库。 #### 二、准备工作 在开始恢复工作之前,我们需要做一些必要的准备工作: 1. **确认数据文件(DBF)存在**:首先确认原始数据库中的...

    使用Java实现对dbf文件的简单读写

    dbf 文件是一种常用的数据库文件格式,用于存储结构化数据。读写 dbf 文件需要遵循一定的步骤,以下是使用 Java 实现对 dbf 文件的简单读写的基本步骤: 1. 创建 DBFWriter 对象:使用 DBFWriter 类创建一个对象,...

    dbf-jdbc-wisecoders,JAVA 读写DBF文件工具包

    例如,当需要将老系统的DBF数据导入到现代数据库系统中,或者分析历史的DBF数据以提取有价值的信息时,这个工具包就能发挥重要作用。 总的来说,`dbf-jdbc-wisecoders`为Java开发者提供了一个高效、易用的接口,...

Global site tag (gtag.js) - Google Analytics