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数据加载至数据库的工作。