无效的字符串或缓冲区长度

我用 JSP写了一段查询mysql的DB的程序。点击一下页面查询一次数据库。刷新页面10次,或是点击跳转10次之后老是会报错。总是提示“无效的字符串或缓冲区长度”。之后运行都不再报错。sql异常。刚刚开始认为是内存不够了,是程序没做gc垃圾回收。再每个查询后面都做了gc(),没有用的对象都申明为null,发现还是会报错。

后来没有办法,考虑是不是jvm的问题,可能是jvm的内存设置问题。Tomcat猫默认开辟的内存数量为64MB

调节了一下tomcat服务器的内存大小:

在tomcat下bin文件夹中的catalina.bat中增加下面这行
set JAVA_OPTS=%JAVA_OPTS% -Xms256M -Xmx800M

发现问题好像解决了,点击20次也不会报sql异常了、

连接db的代码如下

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JdbcOdbcMySql {
Properties info;
Connection conn;
String driverString;
String urlString;
public JdbcOdbcMySql(){
info=new Properties();
urlString="";
driverString="";
{
try {
InputStream is=JdbcOdbcMySql.class
.getResourceAsStream("/config.properties");
info.load(is);
is.close();
driverString=info.getProperty("driver");
urlString=info.getProperty("url");
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
}

public Connection getConnection() {
try {
Class.forName(driverString);

} catch (ClassNotFoundException e) {
System.out.println("xx");
e.printStackTrace();
}
try {
conn=DriverManager.getConnection(urlString);
} catch (SQLException e) {
System.out.println("xxxx");
e.printStackTrace();
}
info=null;
System.gc();
System.runFinalization() ;

return conn;
}
public void release(ResultSet rs,Statement stm,Connection conn){
if(rs!=null) try{ rs.close();} catch(Exception ee){}
if(stm!=null) try{ stm.close();} catch(Exception ee){}
if(conn!=null) try{ conn.close();} catch(Exception ee){}
}
}

你可能感兴趣的:(J2EE开发)