Java 中如何把 csv 加载进数据库
Java应用中,有时需要把CSV中的数据加载到数据库。数据库一般有自带的工具,但大都有专门的界面,很难成为可被Java调用的例程。
借助集算器可以很方便地完成这件事。
我们以“销售数据的csv文件”加载到Mysql数据库的销售表(sales)为例。
销售数据的csv文件(sales.csv),部分数据如下:
ORDERID |
CLIENT |
SELLERID |
AMOUNT |
ORDERDATE |
1 |
LIHD |
11 |
9893 |
2020/12/7 |
2 |
NYSD |
1 |
8332 |
2020/12/7 |
3 |
RSDRG |
10 |
4614 |
2020/12/7 |
4 |
LDCH |
18 |
8807 |
2020/12/7 |
5 |
JXJDI |
19 |
743 |
2020/12/7 |
数据库中的销售数据表(sales),对应的表结构为:
字段名 |
类型 |
ORDERID |
int |
CLIENT |
varchar(10) |
SELLERID |
smallint |
AMOUNT |
double |
ORDERDATE |
date |
1. 运行集算器,配置数据库连接并命名,填写的参数和 JDBC 连接时一样。
操作菜单:Tool->Datasource Connection->Datasouce 设置如下:
2. 在集算器中编写脚本csv2db.dfx:
小数据时(csv中的数据量较少,在运行环境中,适合直接加载至内存 ):
A |
B |
|
1 |
=file("sales.csv").import@ct() |
/读取csv文件内容 |
2 |
=connect("mysql") |
/连接数据库 |
3 |
>A2.update@i(A1,sales,ORDERID,CLIENT,SELLERID,AMOUNT,ORDERDATE) |
/使用db.update函数完成csv数据加载至数据库 |
4 |
>A2.close() |
/关闭数据库连接 |
如果知道csv中数据都是新的,那么可以使用了update@i函数,将只生成INSERT语句。如果还有要更新的数据,则直接使用update函数,但这样速度会慢很多,因为要判断是否生成UPDATE语句。update函数的详细用法见:db.update()。
3. 执行脚本,数据库中sales表已经加载了csv的数据,部分数据如下:
4. 集成到java应用中
集算器提供了 JDBC 驱动,将脚本集成代码如下:
public static void testDataServer() {
Connection con = null;
java.sql.PreparedStatement st;
try {
Class.forName("com.esproc.jdbc.InternalDriver");
con = DriverManager.getConnection("jdbc:esproc:local://");
// 调用 csv2db.dfx 脚本
st = con.prepareCall("call csv2db()");
st.execute();
System.out.println("finish");
} catch (Exception e) {
System.out.println(e);
} finally {
// 关闭连接
if (con != null) {
try {
con.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
}
集算器与 JAVA 集成的进一步信息可参考:《Java 如何调用 SPL 脚本》。
当csv中的数据量较多,在运行环境中,不适合或者无法直接加载至内存时。只需要将A1格中的import改为cursor,就可以完成大数据情况下的csv数据加载至数据库的工作。
英文版