jdbc连接数据库读取数据报错,什么原因
普通dao类:publicclassWorkDao{privateResultSetres=null;publicListgetName(){Stringsql="sel...
普通dao类:
public class WorkDao{
private ResultSet res=null;
public List getName(){
String sql="select name from tb_user ";
List list=new ArrayList();
try{
BaseDao.getexecute(sql,null);
res=BaseDao.getRes();
while(res.next()){
name=res.getString("name");
list.add(name);
}
res.close();
}catch(Exception e){
//打印报错信息
}finally{
BaseDao.closeall();
}
return list;
}
}
BaseDao类:
public class BaseDao {
private static Connection con;
private static PreparedStatement pstmt;
//通用业务操作
public static void execute(String sql, List parms) {
try {
con = DBConnection.getDBCon();
pstmt = con.prepareStatement(sql,
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
if (parms != null) {
setParam(pstmt, parms);
}
pstmt.execute();
} catch (Exception e) {
e.printStackTrace();
}
}
//返回插入的主键
public static ResultSet getKeys() throws SQLException{
return pstmt.getGeneratedKeys();
}
//返回结果集
public static ResultSet getRes() {
ResultSet res = null;
try {
res = pstmt.getResultSet();
//Result result=null;
//result=ResultSupport.toResult(res);
} catch (SQLException e) {
e.printStackTrace();
}
return res;
}
//返回影响行数
public static int getUpdateCount() {
int no = 0;
try {
no = pstmt.getUpdateCount();
} catch (Exception e) {
e.printStackTrace();
}
return no;
}
//循环给参数赋值
public static void setParam(PreparedStatement pstmt, List parms) {
try {
for (int i = 0; i < parms.size(); i++) {
Object obj = (Object) parms.get(i);
pstmt.setObject(i + 1, obj);
}
} catch (Exception e) {
e.printStackTrace();
}
}
//关闭资源
public static void closeAll() {
try {
if (con != null || !con.isClosed()) {
con.close();
}
if (pstmt != null || !pstmt.isClosed()) {
pstmt.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getDBCon()
{
Connection conn=null;
try {
conn = DriverManager.getConnection(url,user,passWord);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
}
这是我普通dao类通过通用的basedao读取数据库的方法。当在页面高速刷新页面的时候,后台就会报错连接已关闭。到底是connection的错,还是res的错??麻烦各位给看看 展开
public class WorkDao{
private ResultSet res=null;
public List getName(){
String sql="select name from tb_user ";
List list=new ArrayList();
try{
BaseDao.getexecute(sql,null);
res=BaseDao.getRes();
while(res.next()){
name=res.getString("name");
list.add(name);
}
res.close();
}catch(Exception e){
//打印报错信息
}finally{
BaseDao.closeall();
}
return list;
}
}
BaseDao类:
public class BaseDao {
private static Connection con;
private static PreparedStatement pstmt;
//通用业务操作
public static void execute(String sql, List parms) {
try {
con = DBConnection.getDBCon();
pstmt = con.prepareStatement(sql,
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
if (parms != null) {
setParam(pstmt, parms);
}
pstmt.execute();
} catch (Exception e) {
e.printStackTrace();
}
}
//返回插入的主键
public static ResultSet getKeys() throws SQLException{
return pstmt.getGeneratedKeys();
}
//返回结果集
public static ResultSet getRes() {
ResultSet res = null;
try {
res = pstmt.getResultSet();
//Result result=null;
//result=ResultSupport.toResult(res);
} catch (SQLException e) {
e.printStackTrace();
}
return res;
}
//返回影响行数
public static int getUpdateCount() {
int no = 0;
try {
no = pstmt.getUpdateCount();
} catch (Exception e) {
e.printStackTrace();
}
return no;
}
//循环给参数赋值
public static void setParam(PreparedStatement pstmt, List parms) {
try {
for (int i = 0; i < parms.size(); i++) {
Object obj = (Object) parms.get(i);
pstmt.setObject(i + 1, obj);
}
} catch (Exception e) {
e.printStackTrace();
}
}
//关闭资源
public static void closeAll() {
try {
if (con != null || !con.isClosed()) {
con.close();
}
if (pstmt != null || !pstmt.isClosed()) {
pstmt.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getDBCon()
{
Connection conn=null;
try {
conn = DriverManager.getConnection(url,user,passWord);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
}
这是我普通dao类通过通用的basedao读取数据库的方法。当在页面高速刷新页面的时候,后台就会报错连接已关闭。到底是connection的错,还是res的错??麻烦各位给看看 展开
4个回答
展开全部
呵呵
连数据库四部曲
1.加载驱动 就是把数据库驱动加载到内存
2.创建连接 通过驱动连接数据库
3.相应操作 增删改查操作
4.关闭
明显你没加载驱动吗!!
就是缺少Class.forname("driver classname");
连数据库四部曲
1.加载驱动 就是把数据库驱动加载到内存
2.创建连接 通过驱动连接数据库
3.相应操作 增删改查操作
4.关闭
明显你没加载驱动吗!!
就是缺少Class.forname("driver classname");
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
关闭资源的时候 没有关闭res
并且最好按照顺序关闭
先关闭res 然后关闭 pstmt 最后关闭con
试试看帮到你没?
并且最好按照顺序关闭
先关闭res 然后关闭 pstmt 最后关闭con
试试看帮到你没?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
resultset的原因。不能使用同一个声明的resultset
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询