在eclipse中运行,连接的是mysql数据库。从别的表读出来,插到另一个表中。有25万条的数据,当插到9万条的时候,出现如下异常:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.nio.charset.CharsetEncoder.isLegalReplacement(Unknown Source)
at java.nio.charset.CharsetEncoder.replaceWith(Unknown Source)
at java.nio.charset.CharsetEncoder.<init>(Unknown Source)
at java.nio.charset.CharsetEncoder.<init>(Unknown Source)
at sun.nio.cs.ext.DoubleByteEncoder.<init>(Unknown Source)
at sun.nio.cs.ext.EUC_CN$Encoder.<init>(Unknown Source)
at sun.nio.cs.ext.EUC_CN.newEncoder(Unknown Source)
at java.lang.StringCoding$StringEncoder.<init>(Unknown Source)
at java.lang.StringCoding$StringEncoder.<init>(Unknown Source)
at java.lang.StringCoding.encode(Unknown Source)
at java.lang.String.getBytes(Unknown Source)
at com.mysql.jdbc.StringUtils.s2b(StringUtils.java:1423)
at com.mysql.jdbc.DatabaseMetaData.s2b(DatabaseMetaData.java:6290)
at com.mysql.jdbc.DatabaseMetaData.access$000(DatabaseMetaData.java:65)
at com.mysql.jdbc.DatabaseMetaData$7.forEach(DatabaseMetaData.java:3480)
at com.mysql.jdbc.DatabaseMetaData$IterateBlock.doForAll(DatabaseMetaData.java:76)
at com.mysql.jdbc.DatabaseMetaData.getPrimaryKeys(DatabaseMetaData.java:3452)
at com.mysql.jdbc.UpdatableResultSet.checkUpdatability(UpdatableResultSet.java:342)
at com.mysql.jdbc.UpdatableResultSet.<init>(UpdatableResultSet.java:134)
at com.mysql.jdbc.MysqlIO.buildResultSetWithRows(MysqlIO.java:2001)
at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:447)
at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:1970)
at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:1387)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1727)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3118)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3047)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:1166)
at baseindex.baseindex.move(baseindex.java:131)
at baseindex.baseindex.main(baseindex.java:198)
怎么办啊?
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.nio.charset.CharsetEncoder.isLegalReplacement(Unknown Source)
at java.nio.charset.CharsetEncoder.replaceWith(Unknown Source)
at java.nio.charset.CharsetEncoder.<init>(Unknown Source)
at java.nio.charset.CharsetEncoder.<init>(Unknown Source)
at sun.nio.cs.ext.DoubleByteEncoder.<init>(Unknown Source)
at sun.nio.cs.ext.EUC_CN$Encoder.<init>(Unknown Source)
at sun.nio.cs.ext.EUC_CN.newEncoder(Unknown Source)
at java.lang.StringCoding$StringEncoder.<init>(Unknown Source)
at java.lang.StringCoding$StringEncoder.<init>(Unknown Source)
at java.lang.StringCoding.encode(Unknown Source)
at java.lang.String.getBytes(Unknown Source)
at com.mysql.jdbc.StringUtils.s2b(StringUtils.java:1423)
at com.mysql.jdbc.DatabaseMetaData.s2b(DatabaseMetaData.java:6290)
at com.mysql.jdbc.DatabaseMetaData.access$000(DatabaseMetaData.java:65)
at com.mysql.jdbc.DatabaseMetaData$7.forEach(DatabaseMetaData.java:3480)
at com.mysql.jdbc.DatabaseMetaData$IterateBlock.doForAll(DatabaseMetaData.java:76)
at com.mysql.jdbc.DatabaseMetaData.getPrimaryKeys(DatabaseMetaData.java:3452)
at com.mysql.jdbc.UpdatableResultSet.checkUpdatability(UpdatableResultSet.java:342)
at com.mysql.jdbc.UpdatableResultSet.<init>(UpdatableResultSet.java:134)
at com.mysql.jdbc.MysqlIO.buildResultSetWithRows(MysqlIO.java:2001)
at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:447)
at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:1970)
at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:1387)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1727)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3118)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3047)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:1166)
at baseindex.baseindex.move(baseindex.java:131)
at baseindex.baseindex.main(baseindex.java:198)
怎么办啊?
{
//chem中的属性
String nameOfChem;
String EN_nameOfChem;
String CAS_RNOfChem;
//base中的相关属性
String Name;
String OtherNames;
String CN_name;
int ID=0;
try{
chembook.getConnection();
chembook.rs=chembook.smt.executeQuery("select name, EN_name ,Id ,CAS_RN from "+chembook.tablename );
baseindex.getConnection();
String filename="E:\\jingwork\\outnew101.txt";
BufferedWriter writer=new BufferedWriter (new FileWriter(filename,true));
while(chembook.rs.next())
{
//获得chem中的name, EN_name ,Id ,CAS_RN 并且去除其中的多余空格
nameOfChem=chembook.rs.getString("name");
EN_nameOfChem=chembook.rs.getString("EN_name");
CAS_RNOfChem=chembook.rs.getString("CAS_RN");
baseindex.rs=baseindex.smt.executeQuery("select Name, OtherNames ,CN_name,ID from "+baseindex.tablename+" where CAS_RN = '"
+ CAS_RNOfChem + "'");
while(baseindex.rs.next())
{
//获得对应baseindex中的相同CAS的Name, OtherNames和ID
Name=baseindex.rs.getString("Name");
OtherNames=baseindex.rs.getString("OtherNames");
CN_name=baseindex.rs.getString("CN_name");
ID=chembook.rs.getInt("ID");
// System.out.println(Name);
String UPDATE1="";
String UPDATE2="";
UPDATE1=makesql( baseindex,EN_nameOfChem,Name,"Name",OtherNames,"OtherNames",ID);
UPDATE2=makesql( baseindex,nameOfChem,CN_name,"CN_name",OtherNames,"OtherNames",ID);
try
{
if(UPDATE1!=null)
{
writer.write(UPDATE1);
writer.newLine();
System.out.println(UPDATE1);
}
if(UPDATE2!=null)
{
writer.write(UPDATE2);
writer.newLine();
System.out.println(UPDATE2);
}
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
Statement smttemp1=(Statement) baseindex.con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
if(UPDATE1!=null)
smttemp1.executeUpdate(UPDATE1);
Statement smttemp2=(Statement) baseindex.con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
if(UPDATE2!=null)
smttemp2.executeUpdate(UPDATE2);
}
}
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
chembook.closeConnection();
baseindex.closeConnection();
}
主函数就是调用了这个函数 ,程序大致是这样chenbook和baseindex 是两个是数据库,分为为12万和25万多,出现异常的是baseindex,怎么才算是分批处理啊 我不会 帮帮忙
/tomcat/bin/catalina.bat 加上下面的命令:
set JAVA_OPTS=-Xms512k -Xmx1024m