求BaseDao中返回多行多列的返回值类型

时间:2022-01-03 03:00:21
   今天老师给了我一个BaseDao有一个传入参数列表和sql语句的查询多行多列方法,返回的是ResultSet,但是我一直取不到值,在网上查了一下,发现直接返回ResultSet不是很好,具体代码如下,请各位大神给个意见,应怎样封装,list还是map
public static ResultSet executeQuerySQL(String preparedSql, List list) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
// int num = 0;

/* 处理SQL,执行SQL */
try {
conn = getConn(); // 得到数据库连接
pstmt = conn.prepareStatement(preparedSql); // 得到PreparedStatement对象
if (list != null) {
for (int i = 0; i < list.size(); i++) {
pstmt.setObject(i + 1, (String) list.get(i)); // 为预编译sql设置参数
}
}
rs = pstmt.executeQuery(); // 执行SQL语句
} catch (SQLException e) {
e.printStackTrace(); // 处理SQLException异常
} finally {
closeAll(conn, pstmt, null);
}
return rs;
}

10 个解决方案

#1


你要看看返回的结果集可是list类型的

#2


问题是那种方式最优,听说是返回Result类型是吗,返回值类型是否填Result

#3


引用 2 楼  的回复:
问题是那种方式最优,听说是返回Result类型是吗,返回值类型是否填Result

是否最优要看如何使用它们,ResultSet如果发挥的功能多,相应付出的代价就大。
比如需要让ResultSet与数据库保持同步的话(通过Result类型设置),就需要保持对数据库的连接,而没有这类需求的话,使用Result会好。

http://wuhenjia.blog.163.com/blog/static/9346944920091117112317299/
http://wenwen.soso.com/z/q142549615.htm
http://www.cnblogs.com/cy163/archive/2008/09/25/1298431.html

#4


也未必是Result好,还没比较过在ResultSet关闭同步类型下两者的比较。

#5


楼主发现的直接返回ResultSet不是很好,是不好在哪?

我理解非可同步的ResultSet和Result之间只是数据组织结构的不同, Result更还可能是在ResultSet基础上转换的结果(result = ResultSupport.toResult(rs);),所以ResultSet在这种情况下还更“轻量”一点。

#6


    非常感谢dracularking这位朋友,我觉得ResultSet不好的原因是我把数据库查询方法封装在BaseDao中。
       返回ResultSet的话PreparedStament不能关闭,rs不能关闭,否则返回的是控制,但是转换后返回Result就没有这种问题了,本人属于菜鸟阶段,很多东西都不是很懂,谢谢大家了,也有说返回List的

#7


引用 6 楼  的回复:
    非常感谢dracularking这位朋友,我觉得ResultSet不好的原因是我把数据库查询方法封装在BaseDao中。
       返回ResultSet的话PreparedStament不能关闭,rs不能关闭,否则返回的是控制,但是转换后返回Result就没有这种问题了,本人属于菜鸟阶段,很多东西都不是很懂,谢谢大家了,也有说返回List的

如果不能关闭,就说明还要用到这些未关闭的对象,比如用于同步数据库等。用Result的话,相当于只用它的拷贝,自然也切断了与其它对象间的联系,但使用范围也相应限制。看看ResultSet不用于同步的话,是不是能关闭?

#8


引用 7 楼  的回复:
引用 6 楼 的回复:

非常感谢dracularking这位朋友,我觉得ResultSet不好的原因是我把数据库查询方法封装在BaseDao中。
返回ResultSet的话PreparedStament不能关闭,rs不能关闭,否则返回的是控制,但是转换后返回Result就没有这种问题了,本人属于菜鸟阶段,很多东西都不是很懂,谢谢大家了,也有说返回List的

如果不能关闭,就说明还要用……

问题是rs关闭后再作为返回值就为null了,求一个返回值为List的方法

#9


引用 8 楼  的回复:
引用 7 楼  的回复:
引用 6 楼 的回复:

非常感谢dracularking这位朋友,我觉得ResultSet不好的原因是我把数据库查询方法封装在BaseDao中。
返回ResultSet的话PreparedStament不能关闭,rs不能关闭,否则返回的是控制,但是转换后返回Result就没有这种问题了,本人属于菜鸟阶段,很多东西都不是很懂,谢谢大家了,也有说返回List的
……

为null是不是因为没设置好

List不清楚,其实差不多,或者就用Result

#10


LIST里面放ARRAY[]

#1


你要看看返回的结果集可是list类型的

#2


问题是那种方式最优,听说是返回Result类型是吗,返回值类型是否填Result

#3


引用 2 楼  的回复:
问题是那种方式最优,听说是返回Result类型是吗,返回值类型是否填Result

是否最优要看如何使用它们,ResultSet如果发挥的功能多,相应付出的代价就大。
比如需要让ResultSet与数据库保持同步的话(通过Result类型设置),就需要保持对数据库的连接,而没有这类需求的话,使用Result会好。

http://wuhenjia.blog.163.com/blog/static/9346944920091117112317299/
http://wenwen.soso.com/z/q142549615.htm
http://www.cnblogs.com/cy163/archive/2008/09/25/1298431.html

#4


也未必是Result好,还没比较过在ResultSet关闭同步类型下两者的比较。

#5


楼主发现的直接返回ResultSet不是很好,是不好在哪?

我理解非可同步的ResultSet和Result之间只是数据组织结构的不同, Result更还可能是在ResultSet基础上转换的结果(result = ResultSupport.toResult(rs);),所以ResultSet在这种情况下还更“轻量”一点。

#6


    非常感谢dracularking这位朋友,我觉得ResultSet不好的原因是我把数据库查询方法封装在BaseDao中。
       返回ResultSet的话PreparedStament不能关闭,rs不能关闭,否则返回的是控制,但是转换后返回Result就没有这种问题了,本人属于菜鸟阶段,很多东西都不是很懂,谢谢大家了,也有说返回List的

#7


引用 6 楼  的回复:
    非常感谢dracularking这位朋友,我觉得ResultSet不好的原因是我把数据库查询方法封装在BaseDao中。
       返回ResultSet的话PreparedStament不能关闭,rs不能关闭,否则返回的是控制,但是转换后返回Result就没有这种问题了,本人属于菜鸟阶段,很多东西都不是很懂,谢谢大家了,也有说返回List的

如果不能关闭,就说明还要用到这些未关闭的对象,比如用于同步数据库等。用Result的话,相当于只用它的拷贝,自然也切断了与其它对象间的联系,但使用范围也相应限制。看看ResultSet不用于同步的话,是不是能关闭?

#8


引用 7 楼  的回复:
引用 6 楼 的回复:

非常感谢dracularking这位朋友,我觉得ResultSet不好的原因是我把数据库查询方法封装在BaseDao中。
返回ResultSet的话PreparedStament不能关闭,rs不能关闭,否则返回的是控制,但是转换后返回Result就没有这种问题了,本人属于菜鸟阶段,很多东西都不是很懂,谢谢大家了,也有说返回List的

如果不能关闭,就说明还要用……

问题是rs关闭后再作为返回值就为null了,求一个返回值为List的方法

#9


引用 8 楼  的回复:
引用 7 楼  的回复:
引用 6 楼 的回复:

非常感谢dracularking这位朋友,我觉得ResultSet不好的原因是我把数据库查询方法封装在BaseDao中。
返回ResultSet的话PreparedStament不能关闭,rs不能关闭,否则返回的是控制,但是转换后返回Result就没有这种问题了,本人属于菜鸟阶段,很多东西都不是很懂,谢谢大家了,也有说返回List的
……

为null是不是因为没设置好

List不清楚,其实差不多,或者就用Result

#10


LIST里面放ARRAY[]