tempad
Readygo技术搜索引擎 >>游戏开发 >> 诚恳的请高手指点

诚恳的请高手指点

Readygo技术搜索引擎 网络搜索 efish 2008-1-17 1:59:54

诚恳的请高手指点

楼主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

责任编辑: efish 参与评论 查找更多:
相关文章
保存到SQL中,高手请进 保存到SQL中,高手请进
如何释放通过Show()显示的窗体? 如何释放通过Show()显示的窗体?
如何打印Image中的图片? 如何打印Image中的图片?
DBgrid中如何显示时间格式? DBgrid中如何显示时间格式?
如何在客户端脚本中判断treeview的当前选中结点是否… 如何在客户端脚本中判断treeview的当前选中结点是否有下级结点
一道面试题:一个左右框架(左为A,右为B),且A和B没… 一道面试题:一个左右框架(左为A,右为B),且A和B没有任何关系,在B里有一个文本框控件。请问在A里如何访问B中的控件。
谁有最新的JCreator的注册码?Pro 2.5 Build 007 11… 谁有最新的JCreator的注册码?Pro 2.5 Build 007 11月19日发布的?多谢
还是xvid的问题(高分 !帮吗解答一下,多谢!) 还是xvid的问题(高分 !帮吗解答一下,多谢!)
MsChart能不能显示出数字? MsChart能不能显示出数字?
win XP 与WIN 98/2000的网络问题 win XP 与WIN 98/2000的网络问题
2秒记住本站域名

玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn

分类导航
Readygo技术搜索引擎