JSP页面查询显示常用模式

【实现100个unity特效之4】Unity ShaderGraph使用教程与各种特效案例(2023/12/1更新) ShaderGraph是Unity中的一个可视化工具,用于创建和编辑图形着色器。其意义在于简化编写复杂着色器的过程,减少对具体编程语言的依赖,使艺术家和设计师可以更方便地创建各种美术效果。使用ShaderGraph可以通过图形界面设置着色器属性,包括颜色、纹理、光照等,并在视窗预览中即时显示结果,从而快速迭代和调整着色器。使用ShaderGraph需要先安装Unity 2018.1或以上版本,并添加ShaderGraph插件。打开ShaderGraph面板后,可以通过拖放节点并连接它们来创建着色器。 阅读详情

 title: JSP页面查询显示常用模式

author: evan

email: evan_zhao@hotmail.com
    
背景 :
1.    需要将数据库查询结果在JSP中以列表方式显示
2.    在一个良好的J2EE模式中数据库查询一般用DAO实现(Data Access Object), JSP仅用于显示数据

问题 :
    通过JDBC ResultSet可获取查询结果(存在于数据库缓冲区内),但在Statement、Connection关闭后ResultSet即不可用。因此需要一种方式取出所有查询结果并传递至JSP页面。

解决方法一 :
    使用Value Object。将每条记录均封装成JavaBean对象,把这些对象装入Collection传送给JSP显示。这种方法的缺点是每一种查询都需要定义一个java class,并且将记录数据封装成java对象时也需要很多额外的代码。
示例代码:

  1.  
  2. //查询数据代码
  3.   Connection  conn = DBUtil.getConnection();
  4.   PreparedStatement  pst = null ;
  5.   ResultSet  rs = null ;
  6.   try {
  7.     String  sql=“select emp_code, real_name from t_employee where organ_id=?”;
  8.     pst = conn.preparedStatement(sql);
  9.     pst.setString(1, “101”);
  10.     ResultSet  rs = pst.executeQuery();
  11.     List  list = new  ArrayList ();
  12.     Employee emp;
  13.     while  (rs.next()){
  14.       emp = new  Employee();
  15.       emp.setReakName(rs.getString(“real_name”));
  16.       emp.setEmpCode(rs.getString(“emp_code”));
  17.       …
  18.       list.add(emp);
  19.     }
  20.     return  list;
  21.   }finally {
  22.     DBUtil.close(rs, pst ,conn);
  23.   }
  24.  
  25.  
  26. //jsp显示部分代码
  27. <%
  28.   List  empList = (List )request.getAttribute(“empList”);
  29.   if  (empList == null ) empList = Collections .EMPTY_LIST;
  30. %>
  31. …
  32. <table  cellspacing="0"  width=”90%”>
  33.     <tr>  <td>代码</td> <td>姓名</td>  </tr>
  34. <%
  35.   Employee emp;
  36.   for  (int  i=0; i< empList.size(); i++){
  37.     emp = (Employee) empList.get(i);
  38. %>
  39.     <tr>  
  40.       <td><%= emp.getEmpCode()%></td> 
  41.       <td><%= emp.getRealName()%></td>  
  42.     </tr>
  43. <%
  44.   }// end for
  45. %>
  46. </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)方法中实现了上述过程(所有列名均使用大写),可参考使用。

示例代码 :

  1.  
  2. //查询数据部分代码:
  3.   …
  4.   Connection  conn = DBUtil.getConnection();
  5.   PreparedStatement  pst = null ;
  6.   ResultSet  rs = null ;
  7.   try {
  8.     String  sql=“select emp_code, real_name from t_employee where organ_id=?”;
  9.     pst = conn.preparedStatement(sql);
  10.     pst.setString(1, “101”);
  11.     rs = pst.executeQuery();
  12.     List  list = DBUtil. resultSetToList(ResultSet  rs);
  13.     return  list;
  14.   }finally {
  15.     DBUtil.close(rs, pst ,conn);
  16.   }
  17.  
  18.  
  19.  
  20. //JSP显示部分代码
  21. <%
  22.   List  empList = (List )request.getAttribute(“empList”);
  23.   if  (empList == null ) empList = Collections .EMPTY_LIST;
  24. %>
  25. …
  26. <table  cellspacing="0"  width=”90%”>
  27.     <tr>  <td>代码</td> <td>姓名</td>  </tr>
  28. <%
  29.   Map  colMap;
  30.   for  (int  i=0; i< empList.size(); i++){
  31.     colMap = (Map ) empList.get(i);
  32. %>
  33.   <tr>  
  34.     <td><%=colMap.get(“EMP_CODE”)%></td> 
  35.     <td><%=colMap.get(“REAL_NAME”)%></td>  
  36.   </tr>
  37. <%
  38.   }// end for
  39. %>
  40. </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

示例代码 :

  1. //查询数据部分代码:
  2.   import  javax.sql.RowSet ;
  3.   import  oracle.jdbc.rowset.OracleCachedRowSet;
  4.   …
  5.   Connection  conn = DBUtil.getConnection();
  6.   PreparedStatement  pst = null ;
  7.   ResultSet  rs = null ;
  8.   try {……
  9.     String  sql=“select emp_code, real_name from t_employee where organ_id=?”;
  10.     pst = conn.preparedStatement(sql);
  11.     pst.setString(1, “101”);
  12.     rs = pst.executeQuery();
  13.     OracleCachedRowSet ors = newOracleCachedRowSet();
  14.     //将ResultSet中的数据封装到RowSet中
  15.     ors.populate(rs);
  16.     return  ors;
  17.   }finally {
  18.     DBUtil.close(rs, pst, conn);
  19.   }
  20.  
  21.  
  22. //JSP显示部分代码
  23. <%
  24.   javax.sql.RowSet  empRS = (javax.sql.RowSet ) request.getAttribute(“empRS”);
  25. %>
  26. …
  27. <table  cellspacing="0"  width=”90%”>
  28.     <tr>  <td>代码</td> <td>姓名</td>  </tr>
  29. <%
  30.   if  (empRS != null ) while  (empRS.next() ) {
  31. %>
  32.   <tr>  
  33.     <td><%= empRS.get(“EMP_CODE”)%></td> 
  34.     <td><%= empRS.get(“REAL_NAME”)%></td>  
  35.   </tr>
  36. <%
  37.   }// end while
  38. %>
  39. </table>



适用场合 :
  方法一使用于定制的查询操作
  方法二适用于多条查询语句或需要对查询结果进行处理的情况。
  方法三适合于单条查询语句,适用于快速开发。


相关链接 :
    如果需要分页显示请参考:JSP分页技术实现
    如果查询结果需要生成WORD或者EXCEL,请参考:使用jsp实现word、excel格式报表打印

附:DBUtil代码 :

  1. import  java.util.List ;
  2. import  java.util.ArrayList ;
  3. import  java.util.Map ;
  4. import  java.util.HashMap ;
  5. import  java.util.Properties ;
  6. import  java.util.Collections ;
  7.  
  8. import  java.sql.Connection ;
  9. import  java.sql.SQLException ;
  10. import  java.sql.ResultSet ;
  11. import  java.sql.ResultSetMetaData ;
  12. import  java.sql.Statement ;
  13. import  java.sql.PreparedStatement ;
  14.  
  15. import  javax.naming.Context ;
  16. import  javax.naming.InitialContext ;
  17. import  javax.naming.NamingException ;
  18.  
  19. import  javax.sql.DataSource ;
  20.  
  21. public  class  DBUtil{
  22.  
  23.     private  static  final  String  JDBC_DATA_SOURCE = "java:comp/env/jdbc/DataSource" ;
  24.  
  25.     /**
  26.      enableLocalDebug: 是否在本地调试。<br>
  27.      值为true时如果查找数据源失败则使用DriverManager与数据库建立连接;
  28.      如果为false则只查找数据源建立数据库连接。
  29.      默认为false。<br>
  30.      可通过系统属性jdbc.enable_local_debug=true设置enableLocalDebug为true,启用本地调试:<br>
  31.      增加JVM parameter: -Djdbc.enable_local_debug=true
  32.      */
  33.     private  static  boolean  enableLocalDebug = false ;
  34.  
  35.     static {
  36.         enableLocalDebug = Boolean .getBoolean ("jdbc.enable_local_debug" );
  37.     }
  38.  
  39.  
  40.     private  static  Context  ctx = null ;
  41.     private  static  javax.sql.DataSource  ds = null ;
  42.  
  43.  
  44.     private  static  void  initDataSource() throws  Exception {
  45.         // Put connection properties in to a hashtable.
  46.  
  47.  
  48.         if  (ctx == null ) {
  49.             ctx = new  InitialContext ();
  50.         }
  51.         if  (ds == null ) {
  52.             ds = (javax.sql.DataSource ) ctx.lookup(JDBC_DATA_SOURCE);
  53.         }
  54.     }        
  55.  
  56.     /**
  57.      * 查找应用服务器数据源,从数据源中获得数据库连接。<br><br>
  58.      * 在本地调试时如果查找数据源失败并且enableLocalDebug==true
  59.      * 则根据系统属性使用java.sql.DriverManager建立连接。<br>
  60.      * 本地调试时可配置的系统属性如下:<br>
  61.      * <p>
  62.      *     #jdbc驱动程序名 <br>
  63.      *     jdbc.driver=<i>oracle.jdbc.driver.OracleDriver</i> <br> <br>
  64.      *     #数据库连接串<br>
  65.      *     jdbc.url=<i>jdbc:oracle:thin:@10.1.1.1:1521:ocrl</i> <br> <br>
  66.      *     #数据库用户名<br>
  67.      *     jdbc.username=<i>scott</i> <br> <br>
  68.      *     #数据库用户密码<br>
  69.      *     jdbc.password=<i>tiger</i> <br>
  70.      * </p>
  71.      * 可通过JVM参数设置上述系统属性:<br>
  72.      * -Djdbc.driver=oracle.jdbc.driver.OracleDriver 
  73.      *  -Djdbc.url=jdbc:oracle:thin:@10.1.1.1:1521:ocrl
  74.      *  -Djdbc.username=scott -Djdbc.password=tiger
  75.      * @return Connection
  76.      * @throws NamingException 如果数据源查找失败
  77.      * @throws SQLException 如果建立数据库连接失败
  78.      */
  79.     public  static  Connection  getConnection() throws   SQLException {
  80.         try {
  81.             initDataSource();
  82.             return  ds.getConnection();
  83.         }catch (SQLException  sqle){
  84.             throw  sqle;
  85.         }catch (Exception  ne){
  86.             if  (enableLocalDebug){
  87.                 return  getTestConn();
  88.             }else {
  89.                 throw  new  RuntimeException (ne.toString());
  90.             }
  91.         }
  92.     }
  93.  
  94.  
  95.     //通过DriverManager建立本地测试连接
  96.     private  static  Connection  getTestConn(){
  97.       try  {
  98.           String  driver = System .getProperty("jdbc.driver" );
  99.           System .out.println("jdbc.driver=" +driver);
  100.  
  101.           String  url = System .getProperty("jdbc.url" );
  102.           System .out.println("jdbc.url=" +url);
  103.  
  104.           String  userName = System .getProperty("jdbc.username" );
  105.           System .out.println("jdbc.username=" +userName);
  106.  
  107.           String  password = System .getProperty("jdbc.password" );
  108.           System .out.println("jdbc.password=" +password);
  109.  
  110.           Class .forName(driver).newInstance();
  111.           return  java.sql.DriverManager .getConnection(url, userName, password);
  112.       }
  113.       catch  (Exception  ex) {
  114.         ex.printStackTrace();
  115.         throw  new  RuntimeException (ex.getMessage());
  116.       }
  117.     }
  118.  
  119.     /**
  120.      * 将查询结果封装成List。<br>
  121.      * List中元素类型为封装一行数据的Map,Map key为字段名(大写),value为相应字段值
  122.      * @param rs ResultSet
  123.      * @return List
  124.      * @throws java.sql.SQLException
  125.      */
  126.     public  static  List  resultSetToList(ResultSet  rs) throws  java.sql.SQLException {
  127.         if  (rs==null ) return  Collections .EMPTY_LIST;
  128.  
  129.         ResultSetMetaData  md = rs.getMetaData();
  130.         int  columnCount = md.getColumnCount();
  131.  
  132.         List  list = new  ArrayList ();
  133.         Map  rowData;
  134.         while  (rs.next()){
  135.             rowData = new  HashMap (columnCount);
  136.             for  (int  i=1; i<=columnCount; i++){
  137.                 rowData.put(md.getColumnName(i),rs.getObject(i));
  138.             }
  139.             list.add(rowData);
  140.         }
  141.         return  list;
  142.     }
  143.  
  144.     /**
  145.      * 关闭ResultSet、Statement和Connection
  146.      * @param rs ResultSet to be closed
  147.      * @param stmt Statement or PreparedStatement  to be closed
  148.      * @param conn Connection  to be closed
  149.      */
  150.     public  static  void  close(ResultSet  rs, Statement  stmt, Connection  conn){
  151.             if  (rs != null ) try {
  152.                 rs.close();
  153.             }catch (java.sql.SQLException  ex){
  154.                 ex.printStackTrace();
  155.             }
  156.             if  (stmt != null ) try {
  157.                  stmt.close();
  158.             }catch (java.sql.SQLException  ex){
  159.                 ex.printStackTrace();
  160.             }
  161.             if  (conn != null ) try {
  162.                 conn.close();
  163.             }catch (java.sql.SQLException  ex){
  164.                 ex.printStackTrace();
  165.             }
  166.     }
  167.  
  168. }// end of DBUtil
YOLOv11改进,YOLOv11结合DynamicConv(动态卷积),CVPR2024,二次创新C3k2结构 DynamicConv(动态卷积)是一个用于提高卷积神经网络(CNN)性能的技术,核心思想是动态地生成卷积核(filter),而不是使用固定的卷积核。通过引入更多的计算灵活性和适应性来增强卷积操作的表达能力,进而提升模型的性能。专家选择:DynamicConv 通过引入多个“专家”(experts),每个专家学习特定的卷积模式。输入图像的不同部分会选择不同的专家进行卷积。动态卷积核生成:根据输入的不同特征,专家网络动态地生成卷积核,而不是使用固定的卷积核。 阅读详情

相关推荐

WEBGL Shader零基础教程(四):片元着色器核心逻辑

本文系统介绍了WebGL渲染管线中片元着色器的核心概念与应用。主要内容包括:1)片元着色器在渲染管线中的定位与作用,作为逐像素处理单元接收插值数据并计算最终颜色;2)输入数据类型与使用规则,重点讲解varying变量和uniform变量的应用场景;3)颜色计算的核心逻辑,涵盖基础色、渐变、纹理采样和颜色混合;4)进阶特效实现与性能优化技巧,包括交互效果、内置函数组合和GPU计算优化;5)通过综合案例演示了纹理、波纹与交互效果的整合实现。文章提供了完整的代码示例和调试建议,为后续学习光照模型、后期处理等高级渲

分享知识,拥抱变化 1372

如何在jsp上查询并显示数据库mysql的数据表格

需要在jsp上实现查询数据库的表格(就是通过用户输入查询表格) 总体的思路: 1.首先用户在jsp中输入需要查询的对象并跳转Servlet。 2.Servlet在后台接收到数据。 3.Servlet与数据库建立连接,并且在Servlet输入 sql代码与用户输入的信息 去查询Mysql数据库里的表格。 4.在Servlet中接收数据库查询到的信息。 5.再通过跳转跳转到一个新的jsp页面中,并在页面中输出查询出来的表格。

超级无敌皮皮超的博客 9万+

超详细YOLOv8目标检测全程概述:环境、训练、验证与预测详解

这篇博文提供了一个关于使用YOLOv8进行目标检测的全面指南,包括环境搭建、模型训练、验证和预测的详细步骤,以及如何解释训练过程中生成的各种图表和数据。整篇文章为读者提供了一个关于如何利用YOLOv8进行目标检测的实践指南,从环境搭建到模型部署,再到结果分析,每一部分都给出了详细的步骤和解释。此外,还有对于模型输出的解释,帮助读者更好地理解和使用YOLOv8模型。

CDBmax的博客 10万+

JavaWeb11 —— 用户信息管理系统

JSP案例——用户信息管理系统 1、需求 简单的用户信息管理系统 对用户信息的增删改查 效果截图(部分) 2、设计 技术选型 Servlet + jsp + Mysql + jdbctemplate + Druid + beanutils + tomccat+bootstrap 数据库设计 CREATE TABLE t_user( -- 创建表 id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) NOT NULL, gender VAR

春和的博客 2653

Hypermesh二次开发实战:从Tcl/Tk脚本到Ext API的进阶之路

本文系统介绍了Hypermesh二次开发的进阶路径,从自动化重复操作的Tcl/Tk脚本入门,到利用HMASCII接口深度读写模型数据,最终深入Ext API进行高性能计算与功能定制。通过实战案例,帮助工程师掌握从脚本录制到C++插件开发的完整技能,显著提升CAE前处理效率与自动化水平。

weixin_29306875的博客 670

手把手教你搞定EMC EFT测试:从电源线到信号线的完整整改实战(附常见失败原因)

本文详细解析了EMC EFT测试中的常见问题及整改措施,从电源线到信号线的完整实战方案。通过四步定位法和成本最优整改策略,帮助工程师有效应对电快速脉冲群干扰,提升产品通过率并降低成本。

weixin_30920597的博客 497

编写jsp页面实现对数据库表的查询

请验证连接属性,并检查 SQL Server 的实例正在主机上运行,且在此端口接受 TCP/IP 连接,还要确保防火墙没有阻止到此端口的 TCP 连接。在本次作业中,我将eclipse与sql server连接起来,并在SSMS中进行插入数据,从而编写jsp页面实现对数据库表的查询。重启完成后,再进入eclipse重新运行,便得到结果:加载驱动成功且连接数据库成功。三、查询数据库javaweb中的表Table_1的所有数据并在页面中显示出来。1.创建名为Table_1的数据表:id为主键,并进行标识规范。

Rosying03的博客 3851

S-function入门及案例详解(3)——S-function进阶案例

目录1.案例描述2.案例详解3.输出波形4.对输入参数进行Mask打包 1.案例描述 设计一个蹦极系统 h为离地面高度,输入参数为长度、质量、离地面高度。 2.案例详解 步骤1.可以修改sfuntmpl函数的名称(这里修改为bengji),并在括号内增加输入参数 参数len,weight,dist分别表示长度、质量、离地面高度;长度用来初始化x0,质量用来初始化m,离地面高度用来初始化h。 function [sys,x0,str,ts,simStateCompliance] = bengji(t,x,u

Wendy的博客 1万+

jsp实现数据查询

out.println( "课程号"+ CID + "课程名字" + CName + "开设学期" + CTerm + "课程编号" + CPID + "年级" +CGrade);原因:编码中出现了system.out.println删掉system后即可。// System.out.println("连接数据库成功!//out.println("加载驱动成功!

m0_65372388的博客 1503

PyTorch实战:3D U-Net医学图像分割从零搭建(附完整代码)

本文详细介绍了如何使用PyTorch从零搭建3D U-Net模型进行医学图像分割,涵盖三维卷积实现、模块化架构设计、医学图像专属优化策略及完整训练流程。通过实战代码演示,帮助开发者掌握UNet-3D在CT、MRI等三维医学图像分割中的应用,提升肝脏肿瘤分割、肺结节检测等任务的准确性。

weixin_29061997的博客 328

CMake入门教程【基础篇】CMake+Visual Studio2022构建C++项目

CMake+Visual Studio2022搭建C++环境

小鱼酱的博客 4969

JSP页面查询显示常用模式[转贴]

JSP页面查询显示常用模式- -背景:1. 需要将数据库查询结果在JSP中以列表方式显示2. 在一个良好的J2EE模式中数据库查询一般用DAO实现(Data Access Object), JSP仅用于显示数据问题:通过JDBC ResultSet可获取查询结果(存在于数据库缓冲区内),但在Statement、Connection关闭后ResultSet即不可用。因此需要一种方式取出所有查询结果并

迷失在爪哇世界中的专栏 1270

Codex 实战 Skills:用 Skill 自动识别并提取 PDF/图片表格数据,效率提升 10 倍

本文介绍如何构建一个多模态文件解析 Skill,用于自动识别和提取 PDF/图片中的表格数据,提升 AI 智能体处理非结构化文档的效率。文章分析了传统方法的局限性,提出分层解析架构(预处理、检测、提取推理、后处理),推荐技术栈包括 pdfplumber、OpenCV 和多模态大模型。详细说明了 Skill 的元数据定义、数据模型设计(使用 Pydantic)和核心实现流程,通过混合策略实现从复杂文档到结构化 JSON/Markdown 的转换,使 AI 代理具备"阅读"多模态文档的能力。

yueyeguzhuo的专栏 299

[转载]JSP页面查询显示常用模式

JSP页面查询显示常用模式title: JSP页面查询显示常用模式author: evanemail: evan_zhao@hotmail.com 背景:1. 需要将数据库查询结果在JSP中以列表方式显示2. ...

congji3817的博客 220

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

下一篇: 教你轻松掌握SQL Server中Case的不同用法
dyzcode
博客等级 码龄17年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值