JDBC内容 大佬们帮一下忙多谢

ajivyskl 2019-06-25 10:38:42
创建了一个返回值为ResultSet的方法 获取了结果集之后关闭了ResultSet对象 然后return ResultSet报错 图二是关闭的一个方法。不管我关闭connection 还是statement 或者resultset 都报错 如果参数全部传空就不报错
...全文
62 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
guishuanglin 2019-06-28
  • 打赏
  • 举报
回复

public List<Object[]> findObjectList(String sql, Object[] args) {
		if(sql==null) return null;
		if(logger.isDebugEnabled()) logger.debug(sql);

		//list对象结果
		final List<Object[]> list = new ArrayList<Object[]>(50);

		PreparedStatement pstmt = null;
		ResultSet rs = null;
		Connection con = null;
		try {
			con = this.getConnection();
			pstmt = con.prepareStatement(sql);
			SetStatementParam.setParameter(pstmt, args);
			pstmt.setFetchSize(50);
			rs = pstmt.executeQuery();
			int r = 1;
			int clength = rs.getMetaData().getColumnCount();
			Object[] obj =null;
			//读取数据库数据
			while (rs.next()) {
				r = 1;
				obj = new Object[clength];
				for(int i=0; i<clength; i++){
					obj[i] =rs.getObject(r++); 
				}
				list.add(obj);
			}
		} catch (Exception ex) {
			logger.error("[操作数据库SQL异常]: "+sql, ex);
		} finally {
			//读取数据库数据完成之后, 关闭连接,流,rs
			closeStatement(pstmt);
			closeResultSet(rs);
			releaseConnection(con, this.getDataSource());
		}//返回list对象集合
		return list;
	}
guishuanglin 2019-06-28
  • 打赏
  • 举报
回复
给你一个在用的代码,写了注释: public List<Object[]> findObjectList(String sql, Object[] args) { if(sql==null) return null; if(logger.isDebugEnabled()) logger.debug(sql); //list对象结果 final List<Object[]> list = new ArrayList<Object[]>(50); PreparedStatement pstmt = null; ResultSet rs = null; Connection con = null; try { con = this.getConnection(); pstmt = con.prepareStatement(sql); SetStatementParam.setParameter(pstmt, args); pstmt.setFetchSize(50); rs = pstmt.executeQuery(); int r = 1; int clength = rs.getMetaData().getColumnCount(); Object[] obj =null; //读取数据库数据 while (rs.next()) { r = 1; obj = new Object[clength]; for(int i=0; i<clength; i++){ obj[i] =rs.getObject(r++); } list.add(obj); } } catch (Exception ex) { logger.error("[操作数据库SQL异常]: "+sql, ex); } finally { //读取数据库数据完成之后, 关闭连接,流,rs closeStatement(pstmt); closeResultSet(rs); releaseConnection(con, this.getDataSource()); }//返回list对象集合 return list; }
ajivyskl 2019-06-28
  • 打赏
  • 举报
回复
引用 4 楼 guishuanglin 的回复:

public List<Object[]> findObjectList(String sql, Object[] args) {
		if(sql==null) return null;
		if(logger.isDebugEnabled()) logger.debug(sql);

		//list对象结果
		final List<Object[]> list = new ArrayList<Object[]>(50);

		PreparedStatement pstmt = null;
		ResultSet rs = null;
		Connection con = null;
		try {
			con = this.getConnection();
			pstmt = con.prepareStatement(sql);
			SetStatementParam.setParameter(pstmt, args);
			pstmt.setFetchSize(50);
			rs = pstmt.executeQuery();
			int r = 1;
			int clength = rs.getMetaData().getColumnCount();
			Object[] obj =null;
			//读取数据库数据
			while (rs.next()) {
				r = 1;
				obj = new Object[clength];
				for(int i=0; i<clength; i++){
					obj[i] =rs.getObject(r++); 
				}
				list.add(obj);
			}
		} catch (Exception ex) {
			logger.error("[操作数据库SQL异常]: "+sql, ex);
		} finally {
			//读取数据库数据完成之后, 关闭连接,流,rs
			closeStatement(pstmt);
			closeResultSet(rs);
			releaseConnection(con, this.getDataSource());
		}//返回list对象集合
		return list;
	}
谢谢兄弟 笨拙了
guishuanglin 2019-06-26
  • 打赏
  • 举报
回复
你返回是一个 ResultSet 对象, 但是你把他关了, 还能用吗? java 不能这么搞, 正确的搞法是: 在取数据之前 connection, statement, resultset 都不能关. 只有取完数据, 拿到了值之后才关闭三者.
ajivyskl 2019-06-25
  • 打赏
  • 举报
回复
报错Reaultset对象关闭后无法使用

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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