wuhaoi007 2014-05-06 12:46 采纳率: 0%
浏览 4298

Eclipse用JAVA连接Mysql 插入大量数据报错 Java heap space

public void Get_WayId_Ref_isWay() throws IOException
{

    PreparedStatement ps = null; 
    Connection con=null;
    BufferedReader br=new BufferedReader(new FileReader(Path.path_read_beijing));

    StringBuffer s=null;
    StringBuffer wayId=null;
    StringBuffer isWay=new StringBuffer("false");
    String regex_nd="\\d+";
    //用匹配<way id后面的数字
    String regex_id="(?<=id=\")\\d+";
    //读取整个文件信息
    try {

        Class.forName(driver).newInstance();
        con=DriverManager.getConnection(url,user,pwd);
        con.setAutoCommit(false);
        int count=0;
        int batchCount=1;
        while((s=new StringBuffer(br.readLine()))!=null)
        {
            count++;
            ArrayList<StringBuffer> tmp=new ArrayList<StringBuffer>();
            //找出way类的信息
            if(batchCount%100==0)
            {
                ps.clearBatch();
            }
            if(s.indexOf("<way")>0)
                {

                  //获得每一组WayId
                  Pattern p1=Pattern.compile(regex_id);
                  Matcher m1=p1.matcher(s);
                  if(m1.find())
                  {
                      wayId=new StringBuffer(m1.group());
                  }
                  while (s.indexOf("</way>") <= 0) 
                  {
                     count++;
                     s=new StringBuffer(br.readLine());
                     //获得该wayid下的refid
                     if(s.indexOf("<nd")>0)
                     {
                         System.out.println("所在行数:"+count);
                         Pattern p=Pattern.compile(regex_nd);
                         Matcher m=p.matcher(s);        
                        if(m.find())
                        {
                            tmp.add(new StringBuffer(m.group()));
                        }
                     }

                     //判断该way是否为道路
                    if(s.indexOf("<tag k=\"highway\"")>0||s.indexOf("<tag k=\"cycleway\"")>0||s.indexOf("<tag k=\"bridge\"")>0)
                    {
                        isWay=new StringBuffer("true");
                    }
                }

                 for(int i=0;i<tmp.size();i++)
                 {      

                        if(isWay.toString().equals("true"))
                        {
                            batchCount++;
                            StringBuffer sql1 = new StringBuffer();
                            sql1.append("insert into test_wayid(wayid,id,isway) values(");
                            sql1.append("'" +wayId+"'");
                            sql1.append(", '"+tmp.get(i)+"', '"+"1');");                        
                            ps=con.prepareStatement(sql1.toString());
                            ps.addBatch();

                        }
                        if(isWay.toString().equals("false"))
                        {
                            batchCount++;
                            StringBuffer sql1 = new StringBuffer();

                            sql1.append("insert into test_wayid(wayid,id,isway) values(");
                            sql1.append("'" +wayId+"'");
                            sql1.append(", '"+tmp.get(i)+"', '"+"1');");

ps=con.prepareStatement(sql1.toString());
ps.addBatch();

                        }
                        ps.executeBatch();
                        if(batchCount%100==0)
                        {
                            con.commit();
                        }

                    }



                }
        }
        con.commit();
    } catch (Exception e) {
        e.printStackTrace();
        // TODO: handle exception
    }finally{
        try {
            if(ps!=null) ps.close();
            if(con!=null) con.close();
        } catch (Exception e2) {
            e2.printStackTrace();
        }
    }


    }

报的错误是:
java.sql.SQLException: java.lang.OutOfMemoryError: Java heap space
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:430)
at com.mysql.jdbc.PreparedStatement.getInstance(PreparedStatement.java:561)
at com.mysql.jdbc.ConnectionImpl.clientPrepareStatement(ConnectionImpl.java:1395)
at com.mysql.jdbc.ConnectionImpl.prepareStatement(ConnectionImpl.java:4178)
at com.mysql.jdbc.ConnectionImpl.prepareStatement(ConnectionImpl.java:4077)
at Wayid_To_Sql.Get_Map_Line_beta.Get_WayId_Ref_isWay(Get_Map_Line_beta.java:128)
at Wayid_To_Sql.Get_Map_Line_beta.main(Get_Map_Line_beta.java:35)

  • 写回答

2条回答

  • paperbook 2014-05-12 01:32
    关注

    堆空间不足,需要在jvm中把堆的大小设大一些-Xmx

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题