【发布时间】:2017-10-27 14:13:36
【问题描述】:
我正在尝试将一个大文本文件插入到 oracle 数据库中,我当前的程序可以运行,但加载速度很慢。 文本文件大约 400 MB
我所做的如下所示......
...
ArrayList<String> nta = new ArrayList<String>();
while ((line = br.readLine()) != null) {
//add data position for each line read
data.add(line.substring(0, 6)+
"="+line.substring(6, 24)+
"="+line.substring(24, 30)+
"="+line.substring(30, 48));
}
db.insertRecord(data);
...
public void insertRecord(ArrayList<String> data) {
String sql = "Insert into Account (NAME, ID, RCBS, CA_NUM, GUID, PARN_GUID)"+
" values "
"(?,?,?,?,?,?)";
...
ps = con.prepareStatements(sql);
for(int i=0; i<data.size(); i++) {
String[] fields = data.get(i).split("=");
ps.setString(1, fields[0]);
ps.setString(2, fields[1]);
ps.setString(3, fields[2]);
ps.setString(4, fields[3]);
ps.setString(5, fields[0].trim()+"."+fields[1].trim()+"."+fields[2].trim()+"."+fields[3].trim()); //Index
ps.setString(6, fields[0].trim()+"."+fields[1].trim()); //PARN Index
ps.execute();
} //end loop
con.commit();
...
有没有什么性能可以提高数据加载的速度?
【问题讨论】:
-
使用批量插入。
-
请停下来,以正确的方式去做。例如使用 SQL*Loader 或外部表。
-
我遇到的问题是文本文件中有一个奇怪的 ascii 字符。当我使用 SQL 加载器时,它会将其加载为 > 在表列中
-
使用 @CrazySabbath 的方法,我遇到了类似的问题。我闯入了“块”——我实际上构建了一个异步 api(将利用多个线程)来处理我们的文档处理——有点矫枉过正,但学习过程很棒哈哈
-
嗨 - 通过 java 插入“奇怪的 ascii 字符”会发生什么?我希望您可以通过在 SQLLDR 中指定字符集来加快速度,例如 LOAD DATA CHARACTERSET MSWIN1252
标签: java sql oracle performance