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();
} 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)
大量数据
--转自