- 浏览: 391316 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (139)
- java (39)
- linux (9)
- hibernate (2)
- Spring (10)
- Struts2 (1)
- Ext (38)
- Ext + Java (5)
- Oracle (5)
- JavaScript (15)
- 开发工具 (3)
- ajax (2)
- WebSerivice+Spring (2)
- WebService+CXF (2)
- 服务器 (4)
- MQ (1)
- Apache (3)
- axis (3)
- myeclipse,maven (2)
- WebService (4)
- web (11)
- httpinvoke (1)
- 多线程 (3)
- 同步 (1)
- Servlet (2)
- css (2)
- div (2)
- html (1)
- file (2)
- 应用软件 (1)
- myEclipse10 (1)
- mysql (2)
- Extjs4 (2)
- JavaScript css (1)
- mongodb (2)
- socket (6)
- 流媒体 (5)
- 语音技术 (5)
- freeswitch (1)
最新评论
-
白天看黑夜:
Apache Mina Server 2.0 中文参考手册(带 ...
Apache Mina 学习 -
stduPanda:
引用引用[自行车在现场咨询quote]引用引用引用引用引用引用 ...
Errors running builder 'DeploymentBuilder' on project '工程名' -
鱼翔空:
maven3 导入报Plugin execution not ...
CXF自动生成wsdl与xsd文件 -
哈哈哥_Supper:
closeAction:'hide',
Extjs4 tabPanel关闭后打开 cannot read property addcls of null -
哈哈哥_Supper:
var tab1 = tabPanel.add(
...
Extjs4 tabPanel关闭后打开 cannot read property addcls of null
全文转载自:http://pharaohsprince.iteye.com/blog/74970,所有权归原作者所有
title: JSP页面查询显示常用模式
背景:
1. 需要将数据库查询结果在JSP中以列表方式显示
2. 在一个良好的J2EE模式中数据库查询一般用DAO实现(Data Access Object), JSP仅用于显示数据
问题:
通过JDBC ResultSet可获取查询结果(存在于数据库缓冲区内),但在Statement、Connection关闭后ResultSet即不可用。因此需要一种方式取出所有查询结果并传递至JSP页面。
解决方法一:
使用Value Object。将每条记录均封装成JavaBean对象,把这些对象装入Collection传送给JSP显示。这种方法的缺点是每一种查询都需要定义一个java class,并且将记录数据封装成java对象时也需要很多额外的代码。
示例代码:
解决方法二:
遍历ResultSet取出所有数据封装进Collection。
具体做法:
1. 生成一个List对象(List list = new ArrayList() )。
2. 生成一个Map对象(Map map = new HashMap() )。使用Map封装一行数据,key为各字段名,value为对应的值。(map.put(“USER_NAME”), rs.getString(“USER_NAME”))
3. 将第2 步生成的Map对象装入第1步的list对象中(list.add(map) )。
4. 重复2、3步直到ResultSet遍历完毕
在DBUtil. resultSetToList(ResultSet rs)方法中实现了上述过程(所有列名均使用大写),可参考使用。
示例代码:
解决方法三:
使用RowSet。
RowSet是JDBC2.0 中提供的接口,Oracle对该接口有相应实现,其中很有用的是oracle.jdbc.rowset.OracleCachedRowSet。 OracleCachedRowSet实现了ResultSet中的所有方法,但与ResultSet不同的是,OracleCachedRowSet 中的数据在Connection关闭后仍然有效。
oracle的rowset实现在http://otn.oracle.com/software/content.html的jdbc下载里有,名称是ocrs12.zip
示例代码:
适用场合:
方法一使用于定制的查询操作
方法二适用于多条查询语句或需要对查询结果进行处理的情况。
方法三适合于单条查询语句,适用于快速开发。
相关链接:
如果需要分页显示请参考:JSP分页技术实现
如果查询结果需要生成WORD或者EXCEL,请参考:使用jsp实现word、excel格式报表打印
附:DBUtil代码:
背景:
1. 需要将数据库查询结果在JSP中以列表方式显示
2. 在一个良好的J2EE模式中数据库查询一般用DAO实现(Data Access Object), JSP仅用于显示数据
问题:
通过JDBC ResultSet可获取查询结果(存在于数据库缓冲区内),但在Statement、Connection关闭后ResultSet即不可用。因此需要一种方式取出所有查询结果并传递至JSP页面。
解决方法一:
使用Value Object。将每条记录均封装成JavaBean对象,把这些对象装入Collection传送给JSP显示。这种方法的缺点是每一种查询都需要定义一个java class,并且将记录数据封装成java对象时也需要很多额外的代码。
示例代码:
- //查询数据代码
- Connection conn = DBUtil.getConnection();
- PreparedStatement pst = null;
- ResultSet rs = null;
- try{
- String sql=“select emp_code, real_name from t_employee where organ_id=?”;
- pst = conn.preparedStatement(sql);
- pst.setString(1, “101”);
- ResultSet rs = pst.executeQuery();
- List list = new ArrayList();
- Employee emp;
- while (rs.next()){
- emp = new Employee();
- emp.setReakName(rs.getString(“real_name”));
- emp.setEmpCode(rs.getString(“emp_code”));
- …
- list.add(emp);
- }
- return list;
- }finally{
- DBUtil.close(rs, pst ,conn);
- }
- //jsp显示部分代码
- <%
- List empList = (List)request.getAttribute(“empList”);
- if (empList == null) empList = Collections.EMPTY_LIST;
- %>
- …
- <table cellspacing="0" width=”90%”>
- <tr> <td>代码</td> <td>姓名</td> </tr>
- <%
- Employee emp;
- for (int i=0; i< empList.size(); i++){
- emp = (Employee) empList.get(i);
- %>
- <tr>
- <td><%= emp.getEmpCode()%></td>
- <td><%= emp.getRealName()%></td>
- </tr>
- <%
- }// end for
- %>
- </table>
解决方法二:
遍历ResultSet取出所有数据封装进Collection。
具体做法:
1. 生成一个List对象(List list = new ArrayList() )。
2. 生成一个Map对象(Map map = new HashMap() )。使用Map封装一行数据,key为各字段名,value为对应的值。(map.put(“USER_NAME”), rs.getString(“USER_NAME”))
3. 将第2 步生成的Map对象装入第1步的list对象中(list.add(map) )。
4. 重复2、3步直到ResultSet遍历完毕
在DBUtil. resultSetToList(ResultSet rs)方法中实现了上述过程(所有列名均使用大写),可参考使用。
示例代码:
- //查询数据部分代码:
- …
- Connection conn = DBUtil.getConnection();
- PreparedStatement pst = null;
- ResultSet rs = null;
- try{
- String sql=“select emp_code, real_name from t_employee where organ_id=?”;
- pst = conn.preparedStatement(sql);
- pst.setString(1, “101”);
- rs = pst.executeQuery();
- List list = DBUtil. resultSetToList(ResultSet rs);
- return list;
- }finally{
- DBUtil.close(rs, pst ,conn);
- }
- //JSP显示部分代码
- <%
- List empList = (List)request.getAttribute(“empList”);
- if (empList == null) empList = Collections.EMPTY_LIST;
- %>
- …
- <table cellspacing="0" width=”90%”>
- <tr> <td>代码</td> <td>姓名</td> </tr>
- <%
- Map colMap;
- for (int i=0; i< empList.size(); i++){
- colMap = (Map) empList.get(i);
- %>
- <tr>
- <td><%=colMap.get(“EMP_CODE”)%></td>
- <td><%=colMap.get(“REAL_NAME”)%></td>
- </tr>
- <%
- }// end for
- %>
- </table>
解决方法三:
使用RowSet。
RowSet是JDBC2.0 中提供的接口,Oracle对该接口有相应实现,其中很有用的是oracle.jdbc.rowset.OracleCachedRowSet。 OracleCachedRowSet实现了ResultSet中的所有方法,但与ResultSet不同的是,OracleCachedRowSet 中的数据在Connection关闭后仍然有效。
oracle的rowset实现在http://otn.oracle.com/software/content.html的jdbc下载里有,名称是ocrs12.zip
示例代码:
- //查询数据部分代码:
- import javax.sql.RowSet;
- import oracle.jdbc.rowset.OracleCachedRowSet;
- …
- Connection conn = DBUtil.getConnection();
- PreparedStatement pst = null;
- ResultSet rs = null;
- try{……
- String sql=“select emp_code, real_name from t_employee where organ_id=?”;
- pst = conn.preparedStatement(sql);
- pst.setString(1, “101”);
- rs = pst.executeQuery();
- OracleCachedRowSet ors = newOracleCachedRowSet();
- //将ResultSet中的数据封装到RowSet中
- ors.populate(rs);
- return ors;
- }finally{
- DBUtil.close(rs, pst, conn);
- }
- //JSP显示部分代码
- <%
- javax.sql.RowSet empRS = (javax.sql.RowSet) request.getAttribute(“empRS”);
- %>
- …
- <table cellspacing="0" width=”90%”>
- <tr> <td>代码</td> <td>姓名</td> </tr>
- <%
- if (empRS != null) while (empRS.next() ) {
- %>
- <tr>
- <td><%= empRS.get(“EMP_CODE”)%></td>
- <td><%= empRS.get(“REAL_NAME”)%></td>
- </tr>
- <%
- }// end while
- %>
- </table>
适用场合:
方法一使用于定制的查询操作
方法二适用于多条查询语句或需要对查询结果进行处理的情况。
方法三适合于单条查询语句,适用于快速开发。
相关链接:
如果需要分页显示请参考:JSP分页技术实现
如果查询结果需要生成WORD或者EXCEL,请参考:使用jsp实现word、excel格式报表打印
附:DBUtil代码:
- import java.util.List;
- import java.util.ArrayList;
- import java.util.Map;
- import java.util.HashMap;
- import java.util.Properties;
- import java.util.Collections;
- import java.sql.Connection;
- import java.sql.SQLException;
- import java.sql.ResultSet;
- import java.sql.ResultSetMetaData;
- import java.sql.Statement;
- import java.sql.PreparedStatement;
- import javax.naming.Context;
- import javax.naming.InitialContext;
- import javax.naming.NamingException;
- import javax.sql.DataSource;
- public class DBUtil{
- private static final String JDBC_DATA_SOURCE = "java:comp/env/jdbc/DataSource";
- /**
- enableLocalDebug: 是否在本地调试。<br>
- 值为true时如果查找数据源失败则使用DriverManager与数据库建立连接;
- 如果为false则只查找数据源建立数据库连接。
- 默认为false。<br>
- 可通过系统属性jdbc.enable_local_debug=true设置enableLocalDebug为true,启用本地调试:<br>
- 增加JVM parameter: -Djdbc.enable_local_debug=true
- */
- private static boolean enableLocalDebug = false;
- static{
- enableLocalDebug = Boolean.getBoolean ("jdbc.enable_local_debug");
- }
- private static Context ctx = null;
- private static javax.sql.DataSource ds = null;
- private static void initDataSource() throws Exception{
- // Put connection properties in to a hashtable.
- if (ctx == null) {
- ctx = new InitialContext();
- }
- if (ds == null) {
- ds = (javax.sql.DataSource) ctx.lookup(JDBC_DATA_SOURCE);
- }
- }
- /**
- * 查找应用服务器数据源,从数据源中获得数据库连接。<br><br>
- * 在本地调试时如果查找数据源失败并且enableLocalDebug==true
- * 则根据系统属性使用java.sql.DriverManager建立连接。<br>
- * 本地调试时可配置的系统属性如下:<br>
- * <p>
- * #jdbc驱动程序名 <br>
- * jdbc.driver=<i>oracle.jdbc.driver.OracleDriver</i> <br> <br>
- * #数据库连接串<br>
- * jdbc.url=<i>jdbc:oracle:thin:@10.1.1.1:1521:ocrl</i> <br> <br>
- * #数据库用户名<br>
- * jdbc.username=<i>scott</i> <br> <br>
- * #数据库用户密码<br>
- * jdbc.password=<i>tiger</i> <br>
- * </p>
- * 可通过JVM参数设置上述系统属性:<br>
- * -Djdbc.driver=oracle.jdbc.driver.OracleDriver
- * -Djdbc.url=jdbc:oracle:thin:@10.1.1.1:1521:ocrl
- * -Djdbc.username=scott -Djdbc.password=tiger
- * @return Connection
- * @throws NamingException 如果数据源查找失败
- * @throws SQLException 如果建立数据库连接失败
- */
- public static Connection getConnection() throws SQLException{
- try{
- initDataSource();
- return ds.getConnection();
- }catch(SQLException sqle){
- throw sqle;
- }catch(Exception ne){
- if (enableLocalDebug){
- return getTestConn();
- }else{
- throw new RuntimeException(ne.toString());
- }
- }
- }
- //通过DriverManager建立本地测试连接
- private static Connection getTestConn(){
- try {
- String driver = System.getProperty("jdbc.driver");
- System.out.println("jdbc.driver="+driver);
- String url = System.getProperty("jdbc.url");
- System.out.println("jdbc.url="+url);
- String userName = System.getProperty("jdbc.username");
- System.out.println("jdbc.username="+userName);
- String password = System.getProperty("jdbc.password");
- System.out.println("jdbc.password="+password);
- Class.forName(driver).newInstance();
- return java.sql.DriverManager.getConnection(url, userName, password);
- }
- catch (Exception ex) {
- ex.printStackTrace();
- throw new RuntimeException(ex.getMessage());
- }
- }
- /**
- * 将查询结果封装成List。<br>
- * List中元素类型为封装一行数据的Map,Map key为字段名(大写),value为相应字段值
- * @param rs ResultSet
- * @return List
- * @throws java.sql.SQLException
- */
- public static List resultSetToList(ResultSet rs) throws java.sql.SQLException{
- if (rs==null) return Collections.EMPTY_LIST;
- ResultSetMetaData md = rs.getMetaData();
- int columnCount = md.getColumnCount();
- List list = new ArrayList();
- Map rowData;
- while (rs.next()){
- rowData = new HashMap(columnCount);
- for (int i=1; i<=columnCount; i++){
- rowData.put(md.getColumnName(i),rs.getObject(i));
- }
- list.add(rowData);
- }
- return list;
- }
- /**
- * 关闭ResultSet、Statement和Connection
- * @param rs ResultSet to be closed
- * @param stmt Statement or PreparedStatement to be closed
- * @param conn Connection to be closed
- */
- public static void close(ResultSet rs, Statement stmt, Connection conn){
- if (rs != null) try{
- rs.close();
- }catch(java.sql.SQLException ex){
- ex.printStackTrace();
- }
- if (stmt != null) try{
- stmt.close();
- }catch(java.sql.SQLException ex){
- ex.printStackTrace();
- }
- if (conn != null) try{
- conn.close();
- }catch(java.sql.SQLException ex){
- ex.printStackTrace();
- }
- }
- }// end of DBUti
发表评论
-
linux下查找java进程占用CPU过高原因
2018-04-03 12:35 7491. 查找进程 top查看进程占用资源情况 ... -
Apache Mina TCP/UDP功能使用说明
2017-03-14 14:18 1683Apache Mina ... -
Input File sumbit Class not found
2015-12-02 00:05 1111最近文件上传,遇到一个愚蠢问题,在form表单提交内容到ac ... -
Extjs4 grid 修改后去掉红三角
2014-03-19 16:09 1146Extjs4 gridPanel 中添加以下配置,修改后, ... -
Extjs4 comboBox 动态赋值
2014-03-12 10:35 1831//首先先定义comboBox的Model Ext.de ... -
Extjs4 tabPanel关闭后打开 cannot read property addcls of null
2014-03-03 13:45 5441最近遇到一个刺手的问题,折腾了好久,一直没找到原因,问题是: ... -
Extjs4 gridpanel 鼠标放上,qtip数据提示
2014-01-27 13:58 2326colModel : new Ext.grid.Colum ... -
Extjs4 comboBox qtip
2014-01-27 13:54 1400// 数据 var _Store = new Ext.da ... -
Extjs4 treepanel 选中当前 节点
2014-01-27 13:45 7306Extjs3 中 可以这样获取 this.getNodeBy ... -
Extjs4 ref 不支持。可以通过query查询
2014-01-15 11:04 1919var panel = new Ext.panel.Pane ... -
Extjs4 fieldLabel width
2014-01-14 16:49 5503var wordName = new Ext.form.Te ... -
Extjs Ext.grid.plugin.RowEditing add insert saveBtn disabled
2014-01-09 16:03 2513比较赶时髦,用了Extjs4.2,今天遇到一个问题,搞了好 ... -
Extjs4 gridPanel 编辑
2014-01-03 16:48 0Ext.grid.RowEditor.prototype.s ... -
Extjs4 分页绑定参数
2014-01-03 14:22 1084//注意红字部分。由于分页的时候,需要带上原始的参数。所以需 ... -
WebService CXF客户端调用样例
2013-01-04 14:48 2032如果服务端提供jar包,客户端直接引用jar ... -
ExtJS layout的9种样式风格总结
2012-12-18 10:29 1084文章转载自:http://virgoooos.iteye.co ... -
Zip文件解析(包含中文目录)
2012-12-11 13:22 2376在解析zip文件时,由于默认版本不支持中文目录,导致解析时遇到 ... -
正则表达式详解
2012-10-09 15:13 927转载自:http://edu.yesky.com/ ... -
map 排序
2012-09-28 10:44 1153用于map的值排序的方法,修改SortedSet 的方法即 ... -
java读写txt文件
2012-09-19 18:49 29974import java.io.BufferedReader; ...
相关推荐
本文实例讲述了jsp页面常用的查询及显示方法。分享给大家供大家参考,具体如下: 背景: 1. 需要将数据库查询结果在JSP中以列表方式显示 2. 在一个良好的J2EE模式中数据库查询一般用DAO实现(Data Access Object)...
1.3.1 JSP页面中的元素 14 1.3.2 JSP语法概要 15 1.3.3关于模板文本(静态HTML) 16 1.4 运行第一个Jsp程序 16 1. 5本章小结 20 第2章Jsp 基础学习 20 2.1 JSP基本语法 20 2.1.1 JSP 语法之...
本章主要介绍Java Web应用程序开发常采用的开发模式,首先介绍Web程序中各组件之间的关系,...单纯的JSP页面编程 JSP+JavaBean设计模式 JSP+Servlet设计模式 JSP+Servlet+JavaBean设计模式 DAO设计模式与数据库访问
视频描述: (一) 在同一jsp页面提交和接收数据 (二) eclipse(myeclipse)开发工具 1.0介绍 1.1安装 1.2配置 1.3使用 (三) model1模式 (四) 一个简单的用户登录系统 韩顺平 j2ee视频实战教程jsp第2讲(中集).wmv 视频...
前言 第一部分 JSP入门 第1章 概述 1.1 Java技术 1.1.1 Java技术的发展 1.1.2 JavaBeans 1.1.3 JDBC 1.1.4 J2EE 1.1.5 EJB 1.1.6 Java Servlet 1.2 JSP技术 1.2.1 JSP...
2.07 避免多次提交页面 在jsp中嵌入该文件,在每个jsp页面的提交语句 前执行该方法.. 121 2.08 检查EMail格式. 122 2.09 电话号码由数字和-组成. 123 2.10 检验IP地址 . 124 2.11 校验忽略样式内容后文本域中的内容...
1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 1.6.2 文档类型声明 10 1.6.3 元素 11 1.6.4 注释...
1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 1.6.2 文档类型声明 10 1.6.3 元素 11 1.6.4 注释...
前言 第一部分 JSP入门 第1章 概述 1.1 Java技术 1.1.1 Java技术的发展 1.1.2 JavaBeans 1.1.3 JDBC 1.1.4 J2EE 1.1.5 EJB 1.1.6 Java Servlet 1.2 JSP技术 1.2.1 JSP技术概述 ...附录C 常用JSP相关网址
1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 1.6.2 文档类型声明 10 1.6.3 元素 11 1.6.4 注释...
前言 第一部分 JSP入门 第1章 概述 1.1 Java技术 1.1.1 Java技术的发展 1.1.2 JavaBeans 1.1.3 JDBC 1.1.4 J2EE 1.1.5 EJB 1.1.6 Java Servlet 1.2 JSP技术 1.2.1 JSP技术概述 ...附录C 常用JSP相关网址
二、 说明一个JSP页面,一个JAVA程序的基本组成,如何阅读JSP页面 三、 页面权限控制的说明,怎样在页面中引用权限,怎么样新增一个权限,如何在新开发的模块上引入权限控制 四、 系统的人员组织结构的介绍 五、 对...
百度编辑器UEditor v1.4.3.2 更新日志: 更新 video-js 以修复 XSS 安全漏洞 百度编辑器UEditor简介 百度编辑器Ueditor是由百度web前端研发部开发所见即所得的编辑器,具有轻量,可定制,...同类推荐:站长常用源码
1.4.1 xml将数据与显示分开 5 1.4.2 xml对文档的格式要求更加严格 6 1.4.3 xml有且只能有一个根元素 6 1.5 xml的编辑工具 7 1.6 xml文档 8 1.6.1 xml声明 9 1.6.2 文档类型声明 10 1.6.3 元素 11 1.6.4 注释...
Struts、Hibernate和Spring是我们Java开发中...但是这种结构仍然存在问题:如JSP页面中需要使用符号嵌入很多的 Java代码,造成页面结构混乱,Servlet和Javabean负责了大量的跳转和运算工作,耦合紧密,程序复用度低等等
10.3 利用Spring在JSP页面输出“HelloWorld”的示例 10.3.1 建立myHelloWorld工程 10.3.2 编写JSP页面helloWorld.jsp 10.3.3 编写控制器HelloWorldController.java 10.3.4 建立Spring的配置文档dispatcherServlet-...