如何将数据从java加载到oracle DB中

时间:2012-03-01 19:14:06

标签: java oracle load sql-loader

我即将开发一个应用程序,用于将数据从文件加载到数据库中。 我已经使用sqlLoader通过命令行执行此操作并且它运行良好,但现在我想为该进程设置GUI。

我正在考虑使用Runtime.exec()从java调用sqlLoader,但我想我会将我的程序限制为仅限Windows,因此不具备可移植性。

我想知道是否有更高效/本地的方式将数据从文件通过java加载到数据库中。类似的东西:

文件 - > JAVA - > ORACLE。

欢迎任何建议!

干杯,

3 个答案:

答案 0 :(得分:1)

您可以使用JDBC连接到Oracle并管理来自该文件的数据。这是关于JDBC的教程:http://www.cs.ubc.ca/~ramesh/cpsc304/tutorial/JDBC/jdbc1.html

回复后编辑:

  • SQLLoader也可以在其他平台上运行(可能名称不同),所以如果你坚持避免使用JDBC,那么就可以编写一个前端到SQLLoader。
  • 您可以通过update batching提高JDBC批量上传的效果。

答案 1 :(得分:1)

管理远程进程并使其依赖于Oracle Utility OS安装是一项维护上的麻烦。我使用了关联数组和包函数。在包中为VARCHAR2,NUMBER等输入数组定义类型。然后(基本上!)在输入文件上使用readline()。split(“,”)为每一列构建并行数组。将数组传递给打包函数,该函数在一次往返中使用Oracle批量处理:

my_package.do_my_insert( field1_array, field2_array, field3_array ... )
   forall idx in field1_array.first .. field1_array.last
      insert into table1 ( field 1, field2, field3 ... )
      values ( field1_array(idx), field2_array(idx), field3_array(idx) ... );

(上面缺少有关如何在JDBC中创建Oracle数组类型的大量代码,但是Oracle在其他地方对此进行了记录)

轻松将SQL批处理的性能提高10倍

答案 2 :(得分:0)

有多种方法可以通过Java将文件加载到DB。

  1. 读取文件,解析数据并构造一个INSERT ALL into table name (col1,col2,..) values (val1,val2,..) select * from dual;之类的查询并批量插入。
  2. 读取文件,解析数据,注入Java对象,创建列表。然后迭代列表,并通过JPA ORM概念插入数据库。
  3. 读取文件,将数据解析为XML,然后通过PL / SQL过程发送XML进行加载。
  4. 从Java调用SQL加载程序。