<pre name="code" class="java">上一篇文章讲了如何利用java将oracle(mysql)数据库中的数据导出到csv文件,这篇文章我们将把上篇文章中的csv文件导入到数据库中。
本程序能解决的问题是将csv文件导入数据库,可以将数据库中原记录删除后导入csv文件中的记录,也可以通过建立临时表(原表以"_tmp"结尾)将csv文件中的数据合并到目标表中。
需要注意的是:
csv文件中的日期格式在dateutil.java文件中调整,如果日期格式不对将会设置为计算机起始时间。
csv文件中要有表头,如果没有表头需要人为添加表头(添加表头的代码没有上传);
csv文件可以以逗号结束,也可以不以逗号结束;
本程序的测试方法用到了<span style="font-family: Arial, Helvetica, sans-serif;">guessTableName</span>方法,需要根据个人情况调整。
本程序中用到了将一些特殊字符串替换,可以自己屏蔽掉,不屏蔽也应该不影响。
入库比导出相对麻烦些了。
package com.blog.laishaobin.db;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.FilenameUtils;
import com.blog.laishaobin.form.CSVImportForm;
public class BlogCSVToTable {
public static void main(String[] args) {
List<String> lstable = new ArrayList<String>();
List<CSVImportForm> csvFormList = new ArrayList<CSVImportForm>();
lstable.add("C:\\Users\\John\\workspace\\blog\\T_TEERIE_FLOW_RELATE_20150523.csv");
lstable.add("C:\\Users\\John\\workspace\\blog\\T_TEERIE_IDENTIFY_20150523.csv");
for (String s : lstable) {
CSVImportForm form = new CSVImportForm(s, CSVImportForm.INSERTTYPE, guessTableName(s));
csvFormList.add(form);
}
try {
new BlogCSVToTable(csvFormList);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//根据文件路径获取表名(根据个人情况修改本函数)
private static String guessTableName(String localFilePath) {
String tableName = null;
tableName = FilenameUtils.getBaseName(localFilePath);
tableName = tableName.substring(0, tableName.length() - 9);
return tableName;
}
public BlogCSVToTable(List<CSVImportForm> csvFormList) throws Exception {
for(CSVImportForm c : csvFormList) {
try {
if (c.isInsert()) {
Connection conn = new DBConnections(DBConnections.URL, DBConnections.USERNAME, DBConnections.PASSWORD).getConn();
CSVLoader csvLoader = new CSVLoader(conn);
csvLoader.setSeprator(c.getSeprator());
csvLoader.loadCSV(c.getLocalFilePath(), c.getTableName(), true);
} else if (c.isUpdate()) {
Connection conn = new DBConnections(DBConnections.URL, DBConnections.USERNAME, DBConnections.PASSWORD).getConn();
CSVLoader csvLoader = new CSVLoader(conn);
csvLoader.setSeprator(c.getSeprator());
csvLoader.loadCSV(c.getLocalFilePath(), getTempTable(c.getTableName()), true);
conn = new DBConnections(DBConnections.URL, DBConnections.USERNAME, DBConnections.PASSWORD).getConn();
new MergeInto(getTempTable(c.getTableName()), c.getTableName(), "SYS_SEQ_NO",
null, null, conn);
}
}catch (Exception e) {
e.printStackTrace();
throw new Exception(e.getMessage());
}
}
}
private String getTempTable(String tableName) {
return tableName.toUpperCase() + "_TMP";
}
}
package com.blog.laishaobin.form;
public class CSVImportForm {
public static final String INSERTTYPE = "01";
public static final String UPDATETYPE = "02";
//文件路径
String localFilePath;
//文件分隔符
char seprator = ',';
//入库类型
String sqlType;
//数据库表名
Stri