且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Tomcat5.5链接Oracle、DB2、MySQL数据源实现JSP下拉框的填充

更新时间:2022-09-20 23:35:32

一、建立表,并填充数据:
建表的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数据源
―――――――――――――――――――――――――――
<!-- The contents of this file will be loaded for each web application -->
<Context privileged='true'>
              <Resource name="zfvims/zfvimsds"
                      auth="Container"
                   type="javax.sql.DataSource"
                            driverClassName="oracle.jdbc.driver.OracleDriver"
                   url="jdbc:oracle:thin:@192.168.0. 2:1521: orcl"
                   username=" zfvims"
                   password="leizhimin"
                   maxIdle="30"
                   maxWait="10000"
                   maxActive="100"
                   removeAbandoned="true"
                            removeAbandonedTimeout="60"
                            logAbandoned="true"/>
</Context>
―――――――――――――――――――――――――――
 
2、  Tocmat中的DB2数据源
―――――――――――――――――――――――――――
<!-- The contents of this file will be loaded for each web application -->
<Context privileged='true'>
              <Resource name="zfvims/zfvimsds"
                      auth="Container"
                   type="javax.sql.DataSource"
                            driverClassName="com.ibm.db2.jcc.DB2Driver"
                   url="jdbc:db2: zfvims"
                   username=“zfvims”
                   password=" leizhimin"
                   maxIdle="30"
                   maxWait="10000"
                   maxActive="100"
                   removeAbandoned="true"
                            removeAbandonedTimeout="60"
                            logAbandoned="true"/>
</Context>
―――――――――――――――――――――――――――
 
3、  Tocmat中的MySQL数据源
―――――――――――――――――――――――――――
<!-- The contents of this file will be loaded for each web application -->
<Context privileged='true'>
              <Resource name="zfvims/zfvimsds"
                      auth="Container"
                   type="javax.sql.DataSource"
                            driverClassName=" com.mysql.jdbc.Driver "
                   url=" jdbc:mysql://192.168.0.2:3306/zfvims"
                   username=“zfvims”
                   password=" leizhimin"
                   maxIdle="30"
                   maxWait="10000"
                   maxActive="100"
                   removeAbandoned="true"
                            removeAbandonedTimeout="60"
                            logAbandoned="true"/>
</Context>
―――――――――――――――――――――――――――
 
注意OracleDB2 JDBC连接的URL有较大差别,其中Oracleurl="jdbc:oracle:thin:@192.168.3.12:1521:orcl"orcl表示数据库SID,一个SID下面的可以有多个用户,每个用户对应自己的数据库。DB2url="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 '<option value=\"' || t.hy_dm || '\">' || t.hy_dm || '-' || t.hy_mc || '</option>' 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
――――――――――――――――――――――――――――――――
<%@ page import="com.zfvims.common.utils.PageComboxOptions"%>
<%--
  Created by IntelliJ IDEA.
  User: leizhimin
  Date: 2006-11-29
  Time: 11:19:02
--%>
<%@ page contentType="text/html;charset=GBK" language="java" %>
<html>
<head><title>Simple jsp page</title></head>
 
<body>
<form action="#" method="post">
    <table>
        <tr>
            <td>行业类型</td>
            <td >
                <select name="hylb">
                     <%=PageComboxOptions.getOptionsHYLB()%>
                </select>
                     </td>
        </tr>
    </table>
</form>
</body>
</html>
――――――――――――――――――――――――――――――――



本文转自 leizhimin 51CTO博客,原文链接:http://blog.51cto.com/lavasoft/10950,如需转载请自行联系原作者