主题:[讨论]用jdbc向数据库插入大数据讨论
目前有个任务,让我头疼不已。希望大家能帮下忙。
其实任务很简单,把txt文本里的内容写入数据库,只能插入一次生成一条数据,而不是多次插入。但是txt文本大约2G,我的内存只有1G。(关于一个2G的文本怎么来的,就先无视吧。囧)
按普通的插入方式是不行的了。会有“java.lang.OutOfMemoryError: Java heap space”的错误提示。
我看了网上的资料,有人说有RandomAccess类插入。。有人说有分块读取的方式插入。一下是我的错误代码。
------------------------------------------------------
public static void insert(){
try{
String sql= "insert into large values (?);";
PreparedStatement prmt = conn.prepareStatement(sql);
RandomAccessFile myFile = new RandomAccessFile("F:\\TEXT\\123.txt","rw");
long length = 100;
for(int i =0; i < length; i++){
myFile.seek(length);
String str = myFile.readLine();
System.out.println(i+"FFF:" + str);
prmt.setString(1, str);
prmt.executeUpdate();
}
myFile.close();
prmt.close();
} catch(Exception e){
System.out.println(e.getMessage());
}
}
----------------------------------------------------------
lenght是控制我输入的字节,不停的循环输入100个,直至文件输入完毕。
----------------------------------------------------------
此不仅没有插入正确数据,还插入了很多条。程序一塌糊涂的感觉。贴出来的原因是,想告诉大家我也思考了,而不是只伸手要。
希望大家能多给我点建议,帮我解决这个问题。
其实任务很简单,把txt文本里的内容写入数据库,只能插入一次生成一条数据,而不是多次插入。但是txt文本大约2G,我的内存只有1G。(关于一个2G的文本怎么来的,就先无视吧。囧)
按普通的插入方式是不行的了。会有“java.lang.OutOfMemoryError: Java heap space”的错误提示。
我看了网上的资料,有人说有RandomAccess类插入。。有人说有分块读取的方式插入。一下是我的错误代码。
------------------------------------------------------
public static void insert(){
try{
String sql= "insert into large values (?);";
PreparedStatement prmt = conn.prepareStatement(sql);
RandomAccessFile myFile = new RandomAccessFile("F:\\TEXT\\123.txt","rw");
long length = 100;
for(int i =0; i < length; i++){
myFile.seek(length);
String str = myFile.readLine();
System.out.println(i+"FFF:" + str);
prmt.setString(1, str);
prmt.executeUpdate();
}
myFile.close();
prmt.close();
} catch(Exception e){
System.out.println(e.getMessage());
}
}
----------------------------------------------------------
lenght是控制我输入的字节,不停的循环输入100个,直至文件输入完毕。
----------------------------------------------------------
此不仅没有插入正确数据,还插入了很多条。程序一塌糊涂的感觉。贴出来的原因是,想告诉大家我也思考了,而不是只伸手要。
希望大家能多给我点建议,帮我解决这个问题。