百万级文本数据入oracle 数据库
Posted 小小菜鸟爱猫猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了百万级文本数据入oracle 数据库相关的知识,希望对你有一定的参考价值。
百万级文本数据入oracle 数据库(亲测可用)
话不多说,直接上代码
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
* 批量插入demo
* @author 杨永琪
* @date 2021年8月11日
*/
public class BatchDemo {
private static String DRIVERCLASS="oracle.jdbc.driver.OracleDriver";
private static String URL="jdbc:oracle:thin:@192.168.137.199:1521:helowin";
private static String USERNAME="root";
private static String PASSWORD="root";
/**
* 获取数据库连接
*/
public static Connection getConnection() throws ClassNotFoundException, SQLException{
Class.forName(DRIVERCLASS);
Connection conn =DriverManager.getConnection(URL, USERNAME, PASSWORD);
return conn;
}
public static void main(String[] arg) throws Exception {
Long beginTime = System.currentTimeMillis();
// 要导入的数据
String fileDir = "E:\\\\yyq\\\\临时文件\\\\temp\\\\XXX.dat";
InputStream is = new FileInputStream(fileDir);
InputStreamReader inr = new InputStreamReader(is, "UTF-8");
BufferedReader bf = new BufferedReader(inr);
String dataLine = "";
Connection conn = getConnection();
//不要自动提交事务
conn.setAutoCommit(false);
String sql = "insert into yycw (preds,msisdn,hprovince,hprovince_name,hcity,hcity_name,user_dinner,in_net_month,brb_no,kd_province,kd_province_name,day)"
+ "values (?,?,?,?,?,?,?,?,?,?,?,?)";
PreparedStatement pst = conn.prepareStatement(sql);
int total = 0;//数据量
int i = 0;//批量插入
while ((dataLine = bf.readLine()) != null) {
i++;
total++;
String[] str = dataLine.split("\\t");//分隔符
pst.setString(1, str[0]);
pst.setString(2, str[1]);
pst.setString(3, str[2]);
pst.setString(4, str[3]);
pst.setString(5, str[4]);
pst.setString(6, str[5]);
pst.setString(7, str[6]);
pst.setString(8, str[7]);
pst.setString(9, str[8]);
pst.setString(10, str[9]);
pst.setString(11, str[10]);
pst.setString(12, str[11]);
pst.addBatch();
// 可以设置不同的大小;如50,100,500,1000等等
if (i > 0 && i % 2000 == 0) {
pst.executeBatch();
conn.commit();
pst.clearBatch();
i=0;
}
}
// 剩余的部分
pst.executeBatch();
conn.commit();
pst.clearBatch();
pst.close();
conn.close();
bf.close();
System.out.println("总数据条数为:"+total);
Long endTime = System.currentTimeMillis();
System.out.println("读取文件耗时:"+(endTime - beginTime) / 1000 + "秒");
}
}
执行效果
所用jar包
ojdbc14.jar
以上是关于百万级文本数据入oracle 数据库的主要内容,如果未能解决你的问题,请参考以下文章