免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4217 | 回复: 0

从文件(*.csv或*.txt)导入Oracle数据库Java源代码 [复制链接]

论坛徽章:
0
发表于 2009-06-17 10:38 |显示全部楼层
近期由于项目需要,实现了从.csv或者.txt文件中读取每行信息后插入到Oracle数据库中的功能,特共享出来。用到第三方开源工具包:opencsv-1.8.jar和commons-dbutils-1.1.jar,需单独下载。
首先需要配置XML文件,如下:
Employee
   
   
   
   
   
   
   
   
   

   
   
      
      
      
      
      
      
         
      
      
   
   
   
      
   
   
   
      
      
      
      
      
      
      
      
   
   
         
   
   
   
   
   

5000
文件中描述了2个导入工作:(1)表EMPLOYEE_TEST(2)表YFJBXX_TEST,文件中每张表的列名和类型需要和导入的目标表一致,且顺序和文件中要导入的内容相匹配,例如下面的csv文件:
"ID","DEP","NAME","AREA","AGE","SEX","XUELI","SALARY","PRIX"
"001","研发","张三","北京","34","女","本科","4546","1"
"002","销售","李四","天津","45","男","专科","4456","2"
可以看到导入的顺序和上述XML文件中的列名一致。
如果从文件导入到数据库中完全匹配,只需配置文件中的即可,代码中调用示例:
    //设置XML配置文件所在位置
    FileImportInitFactory.setConfigFileName("E:/EclipseProjects/WISImport/bin/fileimport/FileImportConfig.xml");
&nb
sp;   FileImportInitFactory.init();
    HashMap h = new HashMap(1,1);
    //如果有日期型的列,需要设置DateFormat并放入HashMap中
    h.put("DateFormat","yyyy-MM-dd HH:mm:ss");
    //执行导入工作
    new ImportFileEntry().importFile("导入的文件路径及名称.csv","YFJBXX_TEST",false,"ImportDirectImpl",h);

ImportFileEntry()的importFile方法说明:
/**
   * 从文件导入到指定表中
   * @param fileName String 要导入文件名
   * @param tableName String 导入目标表名
   * @param firstLineRead boolean 是否读取第一行
   * @param dealClass 处理类名称(例如配置文件中Bean name="ImportDirectImpl")
   * @param aHashMap 扩展用,需特殊处理时可置入变量
   * @throws Exception
   */
public void importFile(String fileName, String tableName, boolean firstLineRead,String dealClass,HashMap aHashMap) throws Exception ;

至此,一个简单的不需做任何处理直接从文件导入数据库对应表的功能就实现了。
但是有些时候我们需要进行特殊的处理,例如表中的当前操作日期列在导入文件中没有,需要在代码中加入,这时就需要实现FileImportInterface接口并加入到配置文件中例如:,ImportWISImpl的实现代码见后续代码清单。
t;);
            columnListInfoCode[0] = columnName;
            columnListInfoCode[1] = columnType;
            System.out.println("Code columnName:" + columnName + " columnType:" + columnType);
          }
        }
        //生成实例
        ImportTableInfoBO importAction = new ImportTableInfoBO();
        importAction.setTableName(tableName);
        importAction.setColumnNamesFile(columnListInfoFile);
        if (columnListInfoCode != null) {
          importAction.setColumnNamesCode(columnListInfoCode);
        }
        //放入静态容器中
        importJobList.put(tableName, importAction);
      }
      //2.其他配置信息
      Element importDealClassList = (Element) eroot.getElementsByTagName("ImportDealClassList").item(0);
      String className;
      String classFullName;
      NodeList beanList = importDealClassList.getElementsByTagName("Bean");
      for (int j=0; j
五、插入数据库操作需实现的接口
package fileimport;
import java.util.HashMap;
/**
* @version 1.0
*/
public interface FileImportInterface {
public void insert(Object[] nextLine,String tableName,HashMap aHashMap,ImportTableInfoBO importTableInfoBO);
public void close();
}
六、直接导入到表程序
package fileimport;
import org.apache.commons.dbutils.QueryRunner;
import java.sql.Connection;
import java.util.HashMap;
import org.apache.commons.dbutils.DbUtils;
import java.sql.SQLException;
import java.sql.DriverManager;
import java.util.Date;
import java.text.SimpleDateFormat;
/**
* 直接导入到表中,不做特殊处理.
* 如需特殊处理,可实现接口FileImportInterface,改造insert方法即可
* @author lihf
* @version 1.0
*/
public class ImportDirectImpl implements FileImportInterface {
QueryRunner qRunner;
private long maxCommitNumber = 5000;
private long insertNum = 1; //已插入但未提交的数据数量
Connection conn = null;
public ImportDirectImpl() {
    qRunner = new QueryRunner();
    if (conn == null) {
      try {
        long l1 = System.currentTimeMillis();
        Class.forName("oracle.jdbc.driver.OracleDriver");
        conn = DriverManager.getConnection("jdbc:oracle:thin:user/pwd@127.0.0.1:1521:dbsid", "user", "pwd");
        conn.setAutoCommit(false);
        long l2 = System.currentTimeMillis();
        System.out.println("connect db time:"+(l2 -
/**
   * 文件和表列完全匹配,没有任何处理直接入库
   * @param columnValues 文件对应表中列名及类型二维数组
   * @param sql 预处理SQL语句
   * @param aHashMap 扩展用,需特殊处理时置入变量
   * @param importTableInfoBO 保存导入目标表的名称、字段名、类型等信息的BO
   * @throws Exception
   */
public void insert(Object[] columnValues, String sql, HashMap aHashMap,ImportTableInfoBO importTableInfoBO) {
    String dateFormat = null;
    Object[] columnValuesInsert = new Object[columnValues.length];
    //日期型数据处理-----------------------------------------------------------------
    if (aHashMap != null){
      dateFormat = (String) aHashMap.get("DateFormat");
      //System.out.println("dateFormat:" + dateFormat);
      //System.out.println("importTableInfoBO:" + importTableInfoBO);
    }
    if (importTableInfoBO != null) {
      String[][] columnList = importTableInfoBO.getColumnNamesFile();
      //System.out.println("columnList.length:"+columnList.length);
      for (int i = 0; i  0) {
        //log.debug("第"+(insertNum)+"条数据插入成功!");
        //System.out.println("第"+(insertNum)+"条数据插入成功!");
        if (insertNum >= maxCommitNumber) { //WIASystemConfig.getInstance().getLong("5000")
          conn.commit();
          //log.info(insertNum+" numbers committed succeed...insertNum归零");
          //System.out.println(insertNum+" numbers committed succeed...insertNum归零");
          insertNum = 1;
        } else {
          insertNum++;
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
      //---写入数据库待加入----
      //log.error(e.getMessage());
    }
}
public void close() {
    if (conn != null) {
      try {
        if (conn != null) {
          DbUtils.commitAndClose(conn);
        System.out.println("close end");
        }
      } catch (SQLException e) {
        e.printStackTrace();
        //log.error(e.getCause());
      }
    }
}
/**
   *
   * @param dateString String
   * @param format String
   * @return Date
   */
public Date formatDate(String dateString,String format){
    try{
      SimpleDateFormat f = new SimpleDateFormat(format);
      return f.parse(dateString);
    }catch(Exception e){
      return null;
    }
}
}
七、某些列需特殊处理后插入程序
package fileimport;
import org.apache.commons.dbutils.QueryRunner;
import java.sql.Connection;
import java.util.HashMap;
import org.apache.commons.dbutils.DbUtils;
import java.sql.SQLException;
import java.sql.DriverManager;
import java.util.Date;
import java.text.SimpleDateFormat;
l1));
      } catch (Exception ex) {
        ex.printStackTrace();
      }
    }
}

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/57965/showart_1966762.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP