Java中如何把csv加载进数据库

本文介绍了如何使用Java结合集算器将CSV数据高效地导入到Mysql数据库。通过集算器的脚本`csv2db.dfx`,在小数据量时利用`update@i`或`update`函数实现数据插入或更新,大数据量时使用`cursor`处理。集成到Java应用中,通过JDBC驱动调用SPL脚本完成数据加载。

Java应用中,有时需要把CSV中的数据加载到数据库。数据库一般有自带的工具,但大都有专门的界面,很难成为可被Java调用的例程。

借助集算器可以很方便地完成这件事。

我们以“销售数据的csv文件”加载到Mysql数据库的销售表(sales)为例。

销售数据的csv文件(sales.csv),部分数据如下:

ORDERIDCLIENTSELLERIDAMOUNTORDERDATE
1LIHD1198932020/12/7
2NYSD183322020/12/7
3RSDRG1046142020/12/7
4LDCH1888072020/12/7
5JXJDI197432020/12/7

数据库中的销售数据表(sales),对应的表结构为:

字段名类型
ORDERIDint
CLIENTvarchar(10)
SELLERIDsmallint
AMOUNTdouble
ORDERDATEdate

1.     运行集算器,配置数据库连接并命名,填写的参数和 JDBC 连接时一样。

操作菜单:Tool->Datasource Connection->Datasouce 设置如下:

2.     在集算器中编写脚本csv2db.dfx:

小数据时(csv中的数据量较少,在运行环境中,适合直接加载至内存 ):

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值