java读取文本,插到mysql表中,出现问题。内存溢出。

package read;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class DBconn {
int bufferSize=20*1024*1024;
ArrayList<String> column3string=new ArrayList<String>();
ArrayList<String> column13string=new ArrayList<String>();

ArrayList<String> test2col1 = new ArrayList<String>();
     ArrayList<Integer> test2col2 = new ArrayList<Integer>();
     ArrayList<String> test2col3 = new ArrayList<String>();
     
     String driver = "com.mysql.jdbc.Driver";
     static String dbName="test";
     static String password="6983124ACD";
     static String userName="root";
     static String url="jdbc:mysql://localhost:3306/" + dbName;
     static String sql= "select * from workinfo";
     
     Connection conn=null;
     public static Connection getConnection() {
    String encoding = "utf-8";
    Connection conn = null;
    try {
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection(url,userName,password);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();

          catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
     }

public void readFile(String filename) throws FileNotFoundException{
    File file = new File(filename);
           if (file.isFile() && file.exists()) {
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file));
InputStreamReader inputStreamReader = new InputStreamReader(bufferedInputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader, bufferSize);
String lineTXT = null;
PreparedStatement pstmt = null;
Connection conn = getConnection();
//String sql = "insert into workinfo(column3,column13) values(1,2)(2,3)(4,5)";
String sql = "insert into workinfo(column3,column13) values(?,?)";

try {
while((lineTXT=bufferedReader.readLine())!=null){
String[] temp = null;
temp = lineTXT.split("  ");
int count = 0;// 计数器
pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
conn.setAutoCommit(false);// 设置数据手动提交,自己管理事务 
pstmt.setString(1, temp[0]);
pstmt.setString(2, temp[0]);
pstmt.addBatch();// 用PreparedStatement的批量处理

if (count % 2000 == 0) {// 当增加了500个批处理的时候再提交
         pstmt.executeBatch();// 执行批处理

}
}
conn.commit();
pstmt.close();
conn.close();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}
     
     public void show(){
    System.out.println("This is string:");
    for (int i = 0; i < column3string.size(); i++) {
    System.out.println(column3string.get(i));
    }
    System.out.println("This is integer:");
    for (int i = 0; i < column13string.size(); i++) {
    System.out.println(column13string.get(i));
    }
     }
     
     public static void main(String[] args) throws FileNotFoundException{
    DBconn test=new DBconn();
    long timeTsetStart =System.currentTimeMillis();//记录时间
     
     test.readFile("D:\\java\\Work_Test\\ddd.dat");
     
     System.out.println("数据插入成功!");
     long timeTestEnd = System.currentTimeMillis();// 记录结束时间
     long time = timeTestEnd - timeTsetStart;
     long secondTime = time / 1000;
     System.out.println("解析时间::" + secondTime + " seconds");
     
     }
}
结果为Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1

主要是while((lineTXT=bufferedReader.readLine())!=null){
String[] temp = null;
temp = lineTXT.split("  ");
int count = 0;// 计数器
pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
conn.setAutoCommit(false);
pstmt.setString(1, temp[0]);
pstmt.setString(2, temp[1]);
pstmt.addBatch();有问题。

时间: 2024-12-15 12:32:00

java读取文本,插到mysql表中,出现问题。内存溢出。的相关文章

清除mysql表中数据

delete from 表名; truncate table 表名; 不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以清空mysql表中所有内容. 效率上truncate比delete快,但truncate删除后不记录mysql日志,不可以恢复数据. delete的效果有点像将mysql表中所有记录一条一条删除到删完, 而truncate相当于保留mysql表的结构,重新创建了这个表,所有的状态都相当于新表.

MYSQL 表中汉字写入或字段赋值时乱码情况排误

-- 当修改字段值,或是直接写入时,汉字变成乱码情况 ,[可注意一下数据库名,记得修改] -- 当字符顺序对汉字不兼容时,可能直接导致乱码情况发生. 最好做到库.表.字段(字符类型)排序规则是否一致 -- eg.在某库下建了临时表没有指定字符排序规则,下游会使用时,将临时表中的str字段值赋值给另外一个库表,可能会出现乱码 -- 未指定排序建表时,则表的排序规则是其库的排序规则 -- 1. 库级别 SELECT * -- DEFAULT_CHARACTER_SET_NAME DEFAULT_CO

面试题目java读取文本内容方式

面试题目java读取文本内容方式二种方式 第一种通过FileInputStream()方式读取 FileInputStream fis = new FileInputStream("a.txt"); //创建流对象 byte[] arr = new byte[4]; int len; while((len = fis.read(arr)) != -1) { System.out.print(new String(arr,0,len)); } fis.close(); 第二种通过:Fil

解决在mysql表中删除自增id数据后,再添加数据时,id不会自增1的问题

https://blog.csdn.net/shaojunbo24/article/details/50036859 问题:mysql表中删除自增id数据后,再添加数据时,id不会紧接.比如:自增id 1 2 3 4 现在删除4,就变成了 1 2 3 这时候,如果增加一条数据,会变成 1 2 3 5 上面5不是我们想要的结果,4才是理想的id,解决方法是,在删除4之后,执行下面的sql语句: ALTER TABLE table_name AUTO_INCREMENT = 1; 原文地址:http

关于mysql表中有大文本limit慢的优化

问题场景: 商品表goods,里面有几个大文本字段,类型用的MediumText,表中记录28万多.分页查询时用limit,在一般PC上需要12秒左右,这个数量级的数据不应该这么慢. 原因分析: 几个大文本拖慢了查询速度,如果只查主键或数字类型的字段则很快.有人说你分页干嘛查大文本啊,原因是产品经理和设计师一致认为分页应该显示些摘要比较美观. 解决方案: 1.通用做法:每次分页查询时,都提供一下开始Id,速度很快. select * from goods where id>65310 limit

读取Excel数据到Table表中

方法一: try { List<DBUtility.CommandInfo> list = new List<DBUtility.CommandInfo>(); string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + path + ";Extended Properties='Excel 12.0; HDR=YES; IMEX=1'"

Java读取文件存储到mysql

写了一批Lua脚本,要放到数据库里面,调用的时候进行计算,由于有太多lua脚本,就写了个程序来录入. 下面主要分三个部分: public static String readToString(String fileName) public static void wirteToMYSQL(String string) throws FileNotFoundException public static List<String> getFileList(String strPath) readT

使用kettle工具将文本文件的内容插入Linux虚拟机下的mysql表中

一.      解压kettle包 1.把包拷到Linux系统下 还有mysql的驱动包 2.解压zip后缀的包 输入命令:unzip /software/pdi-ce-7.0.0.0-25.zip 可以把原来的包删了 输入命令:rm -f pdi-ce-7.0.0.0-25.zip 二.      创建数据库和表 三.      把文本文件里的数据插入数据库表中 1.编写好文本文件 2.在kettle中拖一个文本文件输入和一个表输出 3.右键选择编辑步骤编辑文本文件 点击预览,选择你的文本文件

如何解决前端传来的时间格式与mysql表中时间格式不匹配的查询问题

前端传过来的时间格式为“2016-07-11 11:13:10”,而数据表中对应字段`add_time`的格式为“2016-7-11”,此时sql不能直接用 "where `add_time` = '2016-07-11 11:13:10'.可以通过下面方式实现: 1. 在用于sql查询之前用PHP的strtotime()和date()对数据进行格式化,成为最终需要的格式,再将数据用于查询: 1 $t = '2015-03-02 12:04:12'; 2 $t = date('Y-m-d', s