如何封装一个数据库查询,并把结果返回给调用者
2013-06-07 14:31
399 查看
/** * 查询一个sql语句.结果返回一个list集合 * @param sql * @return * @throws SQLException */ public List query(String sql) throws SQLException { List list = new ArrayList(); Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; Map map = null; try { //得到数据库连接 conn = JdbcUtils.getConnection(); //创建查询语句 ps = conn.prepareStatement(sql); //得到ResultSetMetaData对象,从而获得结果集的所有信息,包括每一列的label ResultSetMetaData rmd = ps.getMetaData(); int count = rmd.getColumnCount(); String label[] = new String[count]; for (int i = 1; i <= count; i++) { label[i - 1] = rmd.getColumnLabel(i); } //执行sql语句 rs = ps.executeQuery(); //遍历每一行数据 while (rs.next()) { map = new HashMap(); //处理一行数据,把列名和数据作为key,value存到map集合中 for (int i = 0; i < count; i++) map.put(label[i], rs.getObject(label[i])); //每一行数据作为一个对象添加到list集合中,返回给调用者 list.add(map); } //list的size()代表结果返回多少行数据 return list; } finally { //关闭资源 JdbcUtils.close(conn, ps, rs); } }
封装数据库连接和关闭的工具类
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public final class JdbcUtils {
private static final String url =
"jdbc:mysql://localhost:3306/struct?user=root&password=root";
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
throw new ExceptionInInitializerError(e);
}
}
// 获得数据库连接
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url);
}
// 关闭数据库连接
public static void close(Connection conn, Statement stmt, ResultSet rs)
throws SQLException {
try {
if (rs != null)
rs.close();
} finally {
try {
if (stmt != null)
stmt.close();
} finally {
if (conn != null)
conn.close();
}
}
}
}
相关文章推荐
- 在使用Hibernate时,因为一个查询需要更多的表连接而要使用SQL来解决性能问题。然而返回的结果集中包含了没有映射的Entity类中的表字段,在这个SQL中还有使用如何将层次关系的父子结点显示为横行
- 把从数据库中查询出的一个字段封装到一个List中,返回List
- 如何从数据库中查询出多个结果集或一个结果集
- python3 apistar 创建web api 根据前端用户输入返回数据库查询结果
- Hibernate2查询视图时,数据库返回多条纪录,封装后的对象却都是一样的问题
- sqlHelper封装类,用于对数据库的操作,此类将查询操作中返回的结果集传递给了一个数组,直接将资源关闭
- JAVA实践-mybatis中junit查询无结果返回,数据库查询有数据
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- adoquery查询结果如何赋给一个变量(delphi和c++ builder)
- PHP简单获取数据库查询结果并返回JSON
- 如何对存储过程返回的结果进行条件查询
- mysql中如何将查询结果的多个记录中的指定字段放到一个二维数组中,以及在in子句中使用数组
- sql server 2005中如何查询一个数据库中有多少张表?
- python查询数据库结果返回
- SQL如何在一个数据库中查询已知列名的所在表
- Hibernate查询,返回new对象(注意这个新定义的类要有构造函数),使用sql带条件分页查询并且把结果显示到一个对象的集里面的解决方案
- python查询数据库返回结果情况
- mybatis查询数据库返回结果为空
- sql server 2005中如何查询一个数据库中有多少张表?
- 如何使用union来聚集查询结果到一个结果集