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
是否最优要看如何使用它们,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在这种情况下还更“轻量”一点。
我理解非可同步的ResultSet和Result之间只是数据组织结构的不同, Result更还可能是在ResultSet基础上转换的结果(result = ResultSupport.toResult(rs);),所以ResultSet在这种情况下还更“轻量”一点。
#6
非常感谢dracularking这位朋友,我觉得ResultSet不好的原因是我把数据库查询方法封装在BaseDao中。
返回ResultSet的话PreparedStament不能关闭,rs不能关闭,否则返回的是控制,但是转换后返回Result就没有这种问题了,本人属于菜鸟阶段,很多东西都不是很懂,谢谢大家了,也有说返回List的
返回ResultSet的话PreparedStament不能关闭,rs不能关闭,否则返回的是控制,但是转换后返回Result就没有这种问题了,本人属于菜鸟阶段,很多东西都不是很懂,谢谢大家了,也有说返回List的
#7
如果不能关闭,就说明还要用到这些未关闭的对象,比如用于同步数据库等。用Result的话,相当于只用它的拷贝,自然也切断了与其它对象间的联系,但使用范围也相应限制。看看ResultSet不用于同步的话,是不是能关闭?
#8
问题是rs关闭后再作为返回值就为null了,求一个返回值为List的方法
#9
为null是不是因为没设置好
List不清楚,其实差不多,或者就用Result
#10
LIST里面放ARRAY[]
#1
你要看看返回的结果集可是list类型的
#2
问题是那种方式最优,听说是返回Result类型是吗,返回值类型是否填Result
#3
是否最优要看如何使用它们,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在这种情况下还更“轻量”一点。
我理解非可同步的ResultSet和Result之间只是数据组织结构的不同, Result更还可能是在ResultSet基础上转换的结果(result = ResultSupport.toResult(rs);),所以ResultSet在这种情况下还更“轻量”一点。
#6
非常感谢dracularking这位朋友,我觉得ResultSet不好的原因是我把数据库查询方法封装在BaseDao中。
返回ResultSet的话PreparedStament不能关闭,rs不能关闭,否则返回的是控制,但是转换后返回Result就没有这种问题了,本人属于菜鸟阶段,很多东西都不是很懂,谢谢大家了,也有说返回List的
返回ResultSet的话PreparedStament不能关闭,rs不能关闭,否则返回的是控制,但是转换后返回Result就没有这种问题了,本人属于菜鸟阶段,很多东西都不是很懂,谢谢大家了,也有说返回List的
#7
如果不能关闭,就说明还要用到这些未关闭的对象,比如用于同步数据库等。用Result的话,相当于只用它的拷贝,自然也切断了与其它对象间的联系,但使用范围也相应限制。看看ResultSet不用于同步的话,是不是能关闭?
#8
问题是rs关闭后再作为返回值就为null了,求一个返回值为List的方法
#9
为null是不是因为没设置好
List不清楚,其实差不多,或者就用Result
#10
LIST里面放ARRAY[]