诚恳的请高手指点
诚恳的请高手指点
楼主wangxiaoshi(关七)2004-03-25 14:02:49 在 Java / J2SE / 基础类 提问 我在用java查询access数据库时总是出现这种错误:
java.sql.SQLException: 内存溢出
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3111)
at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338)
at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:2
53)
为什么??难道是数据库里记录太多,但我觉得不是,以前6000多条时运行的非常好啊,现在只有2000多条了,
而且,如果我把这些记录放在sqlserver的表里面的话, 程序几乎要死,半天都等不出个结果来,为什么
真诚的请高手指教 问题点数:0、回复次数:13Top
1 楼hesi726(hesi)回复于 2004-03-25 14:09:26 得分 0
代码呢??
帮你看看!!Top
2 楼wangxiaoshi(关七)回复于 2004-03-25 14:18:21 得分 0
多谢你啊
package search;
import java.sql.*;
public class date
{
String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";
String sConnStr = "jdbc:odbc:url";
private Connection conn = null;
private Statement stmt = null;
ResultSet rs = null;
//<!--注册数据库驱动程序-->
public date()
{
try
{
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e)
{
System.err.println("date():" + e.getMessage());
}
}
//建立数据库连接及数据查询
public ResultSet executeQuery(String sql)
{
rs = null;
try
{
conn = DriverManager.getConnection(sConnStr);
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql);
}
catch(SQLException ex)
{
System.err.println("aq.executeQuery:" + ex.getMessage());
}
return rs;
}
//定义数据操作
public void executeUpdate(String sql)
{
//rs = null;
try
{
if(conn == null)conn = DriverManager.getConnection(sConnStr);
if(stmt == null)stmt = conn.createStatement();
stmt.executeUpdate(sql);
//stmt.close();
//conn.close();
}
catch(SQLException ex)
{
System.err.println("aq.executeQuery:" + ex.getMessage());
}
}
//关闭数据库连接
public void closeStmt()
{
try
{
stmt.close();
}
catch(SQLException e)
{
e.printStackTrace();
}
}
public void closeConn()
{
try
{
conn.close();
}
catch(SQLException e)
{
e.printStackTrace();
}
}
public static void main(String args[])
{
date da = new date();
String mess = "数学";
String select = "select url from urlrecord where url like "%" + mess + "%"" ;
ResultSet rs = da.executeQuery(select);
try
{
while(rs.next())
{
System.out.println(rs.getString("url"));
}
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}Top
3 楼cbhyk()回复于 2004-03-25 14:20:58 得分 0
检查是否有ResultSet、Statement在使用完后没有close()的地方Top
4 楼yaray(雅睿,生活在别处)回复于 2004-03-25 14:21:31 得分 0
用完之后,要关闭掉ResultSet,Statement,ConnectionTop
5 楼hq1305018(跃强)回复于 2004-03-25 14:24:50 得分 0
建议你改用专用的JDBC驱动,不用JDBC-ODBC驱动。
Top
6 楼viano(优秀是一种习惯!)回复于 2004-03-25 14:26:38 得分 0
可能是服务器出了问题。!Top
7 楼wangxiaoshi(关七)回复于 2004-03-25 14:38:17 得分 0
我做的只是查询, 保持连接的查询啊,因为后面还要很多查询的,所以有必要保持连接,如果每次查完后关闭,等一会儿要查询时又新建连接,那不是更浪费,而且我试过,效率非常低
我也想用jdbc驱动,可是暂时没有,而且用jdbc-odbc要方便一些,
我是在自己机器上用的,数据库就在自己机子上啊,
前几天试还没有问题的,Top
8 楼fohoo(飞狐)回复于 2004-03-25 14:39:21 得分 0
应该是驱动的问题Top
9 楼yaray(雅睿,生活在别处)回复于 2004-03-25 14:47:50 得分 0
如果是执行多次查询,而且不是同时查询的话,可以复用这个Connection;
但Statement,ResultSet要及时地关闭掉.否则会产生异常.Top
10 楼programer23(亮子)回复于 2004-03-25 14:59:47 得分 0
驱动的问题
Top
11 楼wangxiaoshi(关七)回复于 2004-03-25 15:12:45 得分 0
多谢Top
12 楼whyxx(最近有点闲)回复于 2004-03-25 15:34:45 得分 0
关数据库连接不是这样写的,应该写到finally里.
try
{
conn = DriverManager.getConnection(sConnStr);
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql);
}
catch(SQLException ex)
{
} finally {
}
Top
13 楼wangxiaoshi(关七)回复于 2004-03-25 16:12:19 得分 0
多谢了,不过我个人感觉它根本没有执行到那一步就出现内存溢出了
就是执行查询语句的一瞬间,程序它根本没有想就内存溢出,而且这个程序几天前我根本没改可以,Top
-
相关文章
2秒记住本站域名
玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn
