设为首页 收藏本站
查看: 935|回复: 0

[经验分享] Tomcat5.5链接Oracle、DB2、MySQL数据源实现JSP下拉框的填充

[复制链接]

尚未签到

发表于 2018-11-30 10:57:38 | 显示全部楼层 |阅读模式
Tomcat5.5链接OracleDB2MySQL数据源实现JSP下拉框的填充

作者:leizhimin
日期:20061129星期三
天气:晴

背景:在做jsp页面过程中,常常有一些下拉框的表单,表单的内容都是数据库中某些代码表的code(代码)和name(名称)字段。通常JSP页面中要显示这些下拉选择框的时候,都是按照标准业务去做,比如通过后台方法获取到要显示代码和名称的集合,然后传递个前台的方法,最后在页面通过struts标签或者别的技术来实现。这样做的好处之一就是代码周整,但是也比较麻烦,效率也不高。目前我做了一个web应用,又大量的代码表要在页面中中以下拉选择框来展示,并且不用任何其他的框架,针对这种情况,写一个静态工具类实现,类方法直接返回要展示的下拉列表内容。实现方式如下:

一、建立表,并填充数据:
建表的Oracle SQL如下:
――――――――――――――――――
create table DM_HY
(
  HY_DM VARCHAR2(
6) not null,
  HY_MC VARCHAR2(
200) not null,
  MLBZ  CHAR(
1) not null,
  DLBZ  CHAR(
1) not null,
  ZLBZ  CHAR(
1) not null,
  XLBZ  CHAR(
1) not null,
  FQHY  VARCHAR2(
6),
  XYBZ  CHAR(
1) not null
);
-- Add comments to the table
comment on table DM_HY
  is
'行业代码表';
-- Add comments to the columns
comment on column DM_HY.HY_DM
  is
'行业代码';
comment on column DM_HY.HY_MC
  is
'行业名称';
comment on column DM_HY.MLBZ
  is
'门类标志';
comment on column DM_HY.DLBZ
  is
'大类标志';
comment on column DM_HY.ZLBZ
  is
'中类标志';
comment on column DM_HY.XLBZ
  is
'小类标志';
comment on column DM_HY.FQHY
  is
'父亲类型';
comment on column DM_HY.XYBZ
  is
'选用标志';

插入数据:
insert into DM_HY (HY_DM, HY_MC, MLBZ, DLBZ, ZLBZ, XLBZ, FQHY, XYBZ)
values (
'01', '农、林、牧、渔业', 'Y', 'N', 'N', 'N', null, 'Y');
insert into DM_HY (HY_DM, HY_MC, MLBZ, DLBZ, ZLBZ, XLBZ, FQHY, XYBZ)
values (
'010200', '林业', 'N', 'Y', 'Y', 'Y', '01', 'Y');

。。。。。。
二、配置数据源
配置方法:根据数据库类型修改apache-tomcat-5.5.20\conf下的context.xml内容为:
1、  Tomcat种的Oracle数据源
―――――――――――――――――――――――――――


              

―――――――――――――――――――――――――――

2、  Tocmat中的DB2数据源
―――――――――――――――――――――――――――


              

―――――――――――――――――――――――――――

3、  Tocmat中的MySQL数据源
―――――――――――――――――――――――――――


              

―――――――――――――――――――――――――――

注意Oracle和DB2 JDBC连接的URL有较大差别,其中Oracle中url="jdbc:oracle:thin:@192.168.3.12:1521:orcl"的orcl表示数据库SID,一个SID下面的可以有多个用户,每个用户对应自己的数据库。DB2中url="jdbc:db2:zfvims"其中的zfvims是数据库的别名;MySQL中的url=" jdbc:mysql://192.168.0.2:3306/zfvims"其中的zfvims却是数据库的实名。
三、写工具类
package com.zfvims.common.utils;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;

/**
* File Name:  PageComboxOptions.java
* Created by: IntelliJ IDEA.
* Copyright:  Copyright (c) 2003-2006
* Author:      leizhimin
* Modifier:    leizhimin
* Date Time: 2006-11-29 8:58:42
* Readme:   jsp页面中的选择控件(Combox)之选项列表获取工具类
*/
public final class PageComboxOptions {
    private static final Log log = LogFactory.getLog(PageComboxOptions.class);
    private static Connection conn;
    private static Statement stmt;
    private static ResultSet rs;
    //行业类别SQL
    private static final String SQL_HYLB = "select '' || t.hy_dm || '-' || t.hy_mc || '' from dm_hy t order by t.hy_dm";

    static {
        try {
            //建立数据库连接
            Context ctx = new InitialContext();
            DataSource ds = (DataSource) ctx.lookup("java:comp/env/zfvims/zfvimsds");
            conn = ds.getConnection();
        } catch (Exception e) {
            log.error("获取数据库链接出现错误,请检查PageComboxOptions.java和连接池的配置!");
            e.printStackTrace();
        }
    }

    /**
     * @return 获取行业类别下拉列表HTML
     */
    public static String getOptionsHYLB() {
        String optionHTML = "";
        try {
            conn.setAutoCommit(false);
            //创建一个JDBC声明
            stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
            //执行查询
            rs = stmt.executeQuery(SQL_HYLB);
            optionHTML = result2String(rs);
            //关闭数据库连结
            rs.close();
            stmt.close();
        } catch (SQLException e) {
            log.error("查询行业类别出错,请检查!");
            e.printStackTrace();
        }
        return optionHTML;
    }

    /**
     * @return 结果集的String组合串
     */
    private static String result2String(ResultSet rs) throws SQLException {
        String optionHTML = "";
        while (rs.next()) {
            optionHTML = optionHTML + rs.getString(1);
        }
        return optionHTML;
    }
}

说明:这个工具类会一直占用一个数据库连接,为所有需要展示代码表的页面服务。这比每次当页面有代码表需要展示的时候,调用后台方法获取一次数据库连接然后又返回到池更高效。尤其是当系统很庞大的时候,这种优势尤为明显。当然也可以将静态的获取连接的代码块做成一个静态方法,然后分别在每个方法中获取连接。这样实质上每次取出一个代码表,都要获取一次连接,效率也不高,并且每次都要取连接,关闭连接(归池),本人不推荐这种做法。

四、写测试页面
写一个测试页面,在页面中导入工具类PageComboxOptions,然后直接调用其静态方法获取展示需要的html字符串代码,测试页面代码如下:
testoption.jsp
――――――――――――――――――――――――――――――――




Simple jsp page



   
        
            行业类型
            
               
                     
               
                     
        
   



――――――――――――――――――――――――――――――――
五、看看页面效果
Web应用的完整配置组成就不赘述了,下面看看运行后的效果:

《完》










运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-641524-1-1.html 上篇帖子: JK负载均衡器+Tomcat集群 下篇帖子: 部署Tomcat 及 nginx+tomcat负载均衡
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表