jsp与mysql问题

symouse 2001-04-29 09:02:00
小弟在用jsp对数据库操作时,当把游标设为可自由移动时,则查询操作时,java崩溃,说是地址冲突,不知是jodbc的问题还是mysql的问题,望各位大侠指教
...全文
99 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
symouse 2001-05-30
  • 打赏
  • 举报
回复
解决了,是MYSQL的ODBC驱动有问题,劝大家不要用。
symouse 2001-04-30
  • 打赏
  • 举报
回复
如果大家没什么办法,我想我只能这样了:
for (int j=0;j<off;j++){
myrs.next();
}
罪过,我浪费了N个时钟周期。
symouse 2001-04-30
  • 打赏
  • 举报
回复
代码如下:


//**********************************************************************************//
//类名:DBManager //
//功能:处理用户对数据库的查询或更新请求,对更新情求返回更新记录条数,对查询请求返回查询结果集 //
//完成日:01.04.25 //
//备注: //
//**********************************************************************************//

package com.nets.mouse.database;

import java.sql.*;
import java.util.*;


/** 处理用户的数据库请求
*@author LIWENHAO
*@version 1.0
*/
public class DBManager {

private int initCons = 15; //初始连接数
private int increment = 5; //每次增加连接数
private String dbURL = "jdbc:odbc:FUDB"; //数据库地址
private String user = "root"; //用户名
private String password = "symouse";//密码
private String drvClassName = "sun.jdbc.odbc.JdbcOdbcDriver";//数据库驱动
private MouseConPool pool = null;

//*****************************************************************************//
/**初始化一个连接池 */
public DBManager(){
try {
pool = new MouseConPool(dbURL,user,password,drvClassName,initCons,increment);
} catch(Exception e) {}
}

//*****************************************************************************//
/**处理数据库更新请求
*@param String sql :SQL语句
*@return 更新记录条数
*/
public int executeUpdate(String sql) {
int temp = 0;
try {
Connection mycon = pool.takeConnection();
Statement mystm = mycon.createStatement();
temp = mystm.executeUpdate(sql);
mystm.close();
pool.putConnection(mycon);
} catch(Exception e){return -1;}
return temp;
}

//*****************************************************************************//
/** 处理查询请求
*@param String sql:sql语句
*@param int off:返回记录的起点
*@param int length:返回记录条数
*@return 返回一个Iterator型的记录集合,每条记录由一个Hashtable构成,失败则返回空。
*/
public Iterator executeQuery(String sql,int off,int length){

int rsType = TYPE_SCROLL_INSENSITIVE ;
int rscurr = CONCUR_READ_ONLY ;
try{
//查询一个结果集
Connection mycon = pool.takeConnection();
Statement mystm = mycon.createStatement(rsType,rscurr);
ResultSet myrs = mystm.executeQuery(sql);

//提取列名
ResultSetMetaData rsmd = myrs.getMetaData();
int colnum=rsmd.getColumnCount();
String[] colNames = new String[colnum];
for (int i=1;i<=colnum;i++){
colNames[i-1] = rsmd.getColumnName(i);
}

//建立自定义的结果集
int i=length;
AbstractCollection result=new LinkedList();

if(myrs.absolute(off)){;
while(myrs.next() && i>0) {
Hashtable temp = new Hashtable(colnum);
for(int j=0;j<colnum;j++) {
temp.put(colNames[j],myrs.getString(colNames[j]));
}
result.add(temp);
i--;
}
}
myrs.close();
mystm.close();
pool.putConnection(mycon);
//返回结果集
return result.iterator();
}catch(Exception e){ return null;}
}
//***************************************************************************//
}
//**************************************************************************************//



//****************************************************************************//
//类名:MouseConPool //
//功能:建立一个数据库连接池,并为管理该连接池提供接口 //
//完成日:01.04.25 //
//****************************************************************************//

package com.nets.mouse.database;

import java.sql.*;
import java.util.*;


/**数据库连接池
*@author Mouse
*@version 1.0
*/
public class MouseConPool {
private Hashtable mouseCons;//存放连接的集合
private int increment;//用尽后的自增长尺寸
private String dbURL, user, password;//数据库、用户名、密码、

//*******************************************************************//
/** 初始化连接池
*@param String dbURL:数据库地址
*@param String user:用户名
*@param String password:密码
*@param String drvClassName:数据库驱动名
*/
public MouseConPool( String dbURL,
String user,
String password,
String drvClassName,
int initCons,
int increment)
throws SQLException, ClassNotFoundException {

//装载特定的数据驱动
Class.forName(drvClassName);

//设置数据源、用户名、密码、
this.dbURL = dbURL;
this.user = user;
this.password = password;
this.increment = increment;

//定义连接集合
mouseCons = new Hashtable();

// 将连接池置入哈希表
// FALSE说明没有分配
for(int i = 0; i < initCons; i++) {
mouseCons.put(DriverManager.getConnection(dbURL, user, password),
Boolean.FALSE);
}
}

//************************************************************//
/**分配一个连接
*@return 返回一个连接
*/
public Connection takeConnection() throws SQLException {

Connection con = null;
Enumeration cons = mouseCons.keys();

synchronized (mouseCons) {
while(cons.hasMoreElements()) {
con = (Connection)cons.nextElement();

Boolean b = (Boolean)mouseCons.get(con);
if (b == Boolean.FALSE) {
// 测试这个连接是否可用
try {
con.setAutoCommit(true);
}
catch(SQLException e) {
// 这个连接有不可用,新建一个来代替它
con = DriverManager.getConnection(dbURL, user, password);
}
// 是否使用设为true
mouseCons.put(con, Boolean.TRUE);
// 返回一个连接
return con;
}
}
}

//没有找到,扩充集合
for(int i = 0; i < increment; i++) {
mouseCons.put(DriverManager.getConnection(dbURL, user, password),
Boolean.FALSE);
}

//递归
return takeConnection();
}

//****************************************************************//
/**释放一个连接
*@param 预归还的连接
*/
public void putConnection(Connection returned) {
Connection con;
Enumeration cons = mouseCons.keys();
while (cons.hasMoreElements()) {
con = (Connection)cons.nextElement();
if (con == returned) {
mouseCons.put(con, Boolean.FALSE);
break;
}
}
}
//******************************************************************//
}
dragon_bill 2001-04-29
  • 打赏
  • 举报
回复
把code貼出來...
yangzi 2001-04-29
  • 打赏
  • 举报
回复
应该是mysql的问题,

81,092

社区成员

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

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