jsp连接access简单问题,很急

figohl 2003-06-11 05:32:15
tomcat总是说:客户端工作过多。本人采用的是jdbc-odbc桥,正在做聊天室
社及很多的select update insert .数据库操作部份封装成一个类。请高手帮忙。
...全文
22 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
figohl 2003-06-12
  • 打赏
  • 举报
回复
在method中增加了如下方法:
public void closeStmt(){
try{
stmt.close();
}
catch (SQLException e){
e.printStackTrace();
}
}
public void colseConn(){
try{
conn.close();
}
catch (SQLException e){
e.printStackTrace();
}
}
除了select调用这个关闭外,其它update..我仍然在方法中调用。可否?





vincentmax 2003-06-11
  • 打赏
  • 举报
回复
我晕啊~~~~

你在哪儿调用的查询,就在那个方法里面再调关数据库链接的方法啊,--当然你必须在封装的类里面增加关链接的方法啦

我说的够清楚了吧,还搞不定?
tangjiyu 2003-06-11
  • 打赏
  • 举报
回复
多谢楼主,已经收到,可是少了mdb数据库文件,希望你能够把它发给我.
figohl 2003-06-11
  • 打赏
  • 举报
回复
多谢!刚才也注意到这个问题了,昭你的方法改了,把7,8给册掉了,可是聊天室运行不稳
定,五分中后,又不行了。tomcat说:客户端工作太多,注销以后又好用了,我猜可能是数据
源没放开。但不知怎么下手。我会把源代码给你发过去的。
vincentmax 2003-06-11
  • 打赏
  • 举报
回复
楼上所说就是我的意思嘛,封装里面至少包括4个方法:
一个是取数据库链接的方法
一个是关数据库链接的方法
一个是执行select语句的方法(返回resultset类型)
一个是执行非select语句的方法(返回影响的记录数的int值)

你必须在你的应用里面去取链接,执行select语句,然后处理结果集,最后关闭链接。
否则用你封装的executeQuery()方法,你的应用得到结果集是一个已经被关闭的结果集啊--你不可能在你的executeQuery()方法里面关闭链接之后才返回结果集的,这时候的结果集已经跟链接一起被关闭了。
tangjiyu 2003-06-11
  • 打赏
  • 举报
回复
记得把你的聊天室发给我,多谢,再次感谢。bily761226@yahoo.com.cn
建议在加一个关闭的封装
public void connclose()
{
if (conn!=null)
{
try
{
conn.close();
}
catch (SQLException e)
{
}
}
}
tangjiyu 2003-06-11
  • 打赏
  • 举报
回复
上面错了,更正:
public ResultSet executeQuery(String sql){
try{
conn=DriverManager.getConnection(sConnStr);
stmt=conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
rs=stmt.executeQuery(sql);
7 stmt.close();
8 conn.close();
}
catch(SQLException ex){
System.err.println("aq.executeQuery:"+ex.getMessage());
}
15 return rs;
}
tangjiyu 2003-06-11
  • 打赏
  • 举报
回复
能不能够把你的相关文件发为我,希望能够帮帮你。
email:bily7612262@yahoo.com.cn
我也用JDBCODBC连ACCESS,怎么只要 SELECT DISTINCT 某某某 FROM 某表就出错
这是因为:7和8关闭了连接,15又要返回它当然会出错,注意select和其他更新操作不同,select要返回一个数据集,所以只有在jsp引用后在关闭。
1 public void executeInsert(String sql){
2 try{
3 conn=DriverManager.getConnection(sConnStr);
4 Statement stmt=conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, 5ResultSet.CONCUR_UPDATABLE);
6 stmt.executeUpdate(sql);
7 stmt.close();
8 conn.close();
9 }
10 catch(SQLException ex)
11 {
12 System.err.println("sql_data.executerInset:"+ex.getMessage());
13 }
14 }
15 return rs;
vincentmax 2003-06-11
  • 打赏
  • 举报
回复
你的封装有问题啊!!

一般的做法是封装了取连接方法、关连接方法和执行sql操作的方法。
然后在你的应用里面控制,先取连接,执行sql,关连接。
关键是,你不能在执行sql的方法里面关连接啊,这样你返回的resultset已经是关闭的了啊!!
figohl 2003-06-11
  • 打赏
  • 举报
回复
好象和他无关系。现在打开其它页时,tomcat说:resultset is closed.在线等,另外再加
100分。
sasa_sasa 2003-06-11
  • 打赏
  • 举报
回复
试试这样写:select distinct(colmun) from table_name;
figohl 2003-06-11
  • 打赏
  • 举报
回复
以下是封装的数据库操作代码:
连接已经关闭了呀?
package reg_one;
import java.sql.*;
import java.sql.DriverManager;
public class db{
String sDBDriver="sun.jdbc.odbc.JdbcOdbcDriver";
String sConnStr="jdbc:odbc:jsp_db";
private Statement stmt=null;
private Connection conn=null;
ResultSet rs=null;
public db() {
try{
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e){
System.err.println("db():"+e.getMessage());}
}
public ResultSet executeQuery(String sql){
try{
conn=DriverManager.getConnection(sConnStr);
stmt=conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
rs=stmt.executeQuery(sql);
stmt.close();
conn.close();
}
catch(SQLException ex){
System.err.println("aq.executeQuery:"+ex.getMessage());
}
return rs;
}

public void executeInsert(String sql){
try{
conn=DriverManager.getConnection(sConnStr);
Statement stmt=conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
stmt.executeUpdate(sql);
stmt.close();
conn.close();
}
catch(SQLException ex)
{
System.err.println("sql_data.executerInset:"+ex.getMessage());
}
}

public void executeUpate(String sql){
try{
conn=DriverManager.getConnection(sConnStr);
Statement stmt=conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
stmt.executeUpdate(sql);
stmt.close();
conn.close();
}
catch(SQLException ex)
{
System.err.println("sql_data.executerUpdate:"+ex.getMessage());
}
}

public void executeDelete(String sql){
try{
conn=DriverManager.getConnection(sConnStr);
Statement stmt=conn.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
stmt.executeUpdate(sql);
stmt.close();
conn.close();
}
catch(SQLException ex)
{
System.err.println("sql_data.executerDelete:"+ex.getMessage());
}
}
}





darkangellc 2003-06-11
  • 打赏
  • 举报
回复
我也用JDBCODBC连ACCESS,怎么只要 SELECT DISTINCT 某某某 FROM 某表就出错
caoze 2003-06-11
  • 打赏
  • 举报
回复
是不是没关闭连接啊?

可能的话用pool看看。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧