在JDBC中,我们通常使用javax.sql.ResultSet类来存放放回的数据,它的流程和生命周期如下:
使用ResultSet来返回数据库查询结果
Client --> Connection --> Statement --> JDBC Driver --
+ Database Client <-- Parsing <-- ResultSet <-- JDBC Driver --
+ Connection lifecycle ResultSet lifecycle
我们可以看到,这样会长期占用数据库连接的资源,是一个有点不爽的问题...
在JSTL中提供了另外一种机制,让我们在返回查询结果到表示层的时候,可以做到离线使用!它就是javax.servlet.jsp.jstl.sql.Result类!
1.导入jstl包,是属于j2ee中的包
2.对数据库进行操作
数据库中的表ACCOUNT
package com.org.connectsqlserver;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Map;
import javax.servlet.jsp.jstl.sql.Result;
import javax.servlet.jsp.jstl.sql.ResultSupport;
//通过result获取结果集
public class GetResult {
public static final String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
public static final String url = "jdbc:sqlserver://localhost:1433;databaseName=Bank";
public static final String name = "sa";
public static final String password = "sa";
public static void main(String[] args){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, name, password);
String sql="select * from account";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
//利用ResultSupport.toResult(rs)将ResultSet转换为Result;
Result result = (Result) ResultSupport.toResult(rs);
//result.getRows();获取表中的数据,返回一个Map数组,表中的每一列都放在一个Map集合中
Map[] rows = result.getRows();
for(Map row:rows){
//通过row.get("ACCOUNT_ID")来获取每列的数据
System.out.print(row.get("ACCOUNT_ID")+"\t");
System.out.print(row.get("ACCOUNT_NAME")+"\t");
System.out.print(row.get("CODE")+"\t");
System.out.print(row.get("OPEN_TIME")+"\t");
System.out.println();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
conn.close();
ps.close();
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//执行后返回的结果
//1 陆逊 420106197810008674 2011-07-10 00:00:00.0
//2 大乔 422432197810034561 2011-07-12 00:00:00.0
//3 孙尚香 422432197810034168 2011-07-25 00:00:00.0
//4 吕布 422714197909077458 2013-03-19 22:10:38.613
//5 赵云 420104197811110852 2011-07-28 00:00:00.0
//6 张三 420104197811213214 2012-07-03 00:00:00.0
//7 刘备 420104199202143521 2011-11-20 00:00:00.0
//8 关羽 420104198905219542 2012-04-10 00:00:00.0
//9 李浩 420104198601245234 2011-02-14 00:00:00.0
//10 王武 420104198504251654 2010-04-25 00:00:00.0
//11 你好 420106197810003652 2013-03-27 23:30:08.56
//19 jack 422432197810034221 2013-03-28 00:13:19.06