歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux管理 >> Linux網絡

RedHatLinux網絡服務器構架實務(七)

  vi /home/www/cnmsql.jsp    ## 源代碼如下:      <%@ page language="Java" import="java.sql.*"%>     <%     Class.forName ("org.gjt.mm.mysql.Driver");    Connection conn =   DriverManager.getConnection("jdbc:mysql://host_name/db_name","user_name","passWord");    Statement stmt = conn.createStatement();    ResultSet rs=stmt.executeQuery("select * from prov");    rs.next();    out.print(rs.getString("prov_id")+"   "+rs.getString("prov_name")+"");    rs.next();    out.print(rs.getString("prov_id")+"   "+rs.getString("prov_name")+"");    rs.previous();    out.print(rs.getString("prov_id")+"   "+rs.getString("prov_name")+"");    rs.last();    out.print(rs.getString("prov_id")+"   "+rs.getString("prov_name")+"");    rs.first();    out.print(rs.getString("prov_id")+"   "+rs.getString("prov_name")+"");    rs.close();    stmt.close();     conn.close();    %>       4 測試該程序    lynx http://www.yesgo.loc/cnmysql    ##正確的結果應該是:      1 安徽    2 北京    1 安徽    34 台灣    1 安徽      例二:使用連接池連接數據庫    1 建立數據源    vi /usr/local/resin/conf/resin.conf      <resource-ref>    <res-ref-name>jdbc/yesgo</res-ref-name>    //數據源名稱    <res-type>javax.sql.DataSource</res-type>   //數據源類型    <init-param driver-name="org.gjt.mm.mysql.Driver"/>  //數據庫驅動    <init-param url=" jdbc:mysql://localhost/yesgo "/>  //連接串    <init-param user="your_user_name"/>      //用戶名    <init-param password="your_password"/>    //密碼    <init-param max-connections="20"/>      //最大連接數    <init-param max-idle-time="30"/>       //延時時間    </resource-ref>      2 創建JSP源文件    toUCh /home/www/testpool.jsp    chown -R www /home/www/testpool.jsp    chgrp -r root /home/www/testpool.jsp    chmod 771 /home/www/testpool.jsp      vi /home/www/testpool.jsp    ## 源代碼如下:      <%@ page language="java" import="java.sql.*,com.caucho.sql.*;"%>     <%     DBPool pool=new DBPool();    Connection conn = pool.getPool("data_source_name   ").getConnection();    Statement stmt = conn.createStatement();    ResultSet rs=stmt.executeQuery("select * from prov");    rs.next();    out.print(rs.getString("prov_id")+rs.getString("prov_name")+"");  rs.next();    out.print(rs.getString("prov_id")+rs.getString("prov_name")+"");  rs.previous();    out.print(rs.getString("prov_id")+rs.getString("prov_name")+"");  rs.last();    out.print(rs.getString("prov_id")+"   "+rs.getString("prov_name")+"");    rs.first();    out.print(rs.getString("prov_id")+rs.getString("prov_name")+"");  rs.close();    stmt.close();     conn.close();    %>      3 調試該程序    lynx http://www.yesgo.loc/testpool.jsp     ##處理的結果跟例一是一樣的:      1 安徽    2 北京    1 安徽    34 台灣    1 安徽      例三:使用處理層連接數據庫    ##本例告訴你如何使用組件    ##其實你完全可以寫一個bean來處理數據庫,而不用象例二那麼羅索。只用四條語句就可以取出數據庫中的所有數據並顯示出來,這樣做實現了處理層和邏輯層的徹底分離,由邏輯層發出指令、由處理層去響應相關處理,記錄集也不會返回到邏輯層的jsp頁面,而由處理層的bean處理,使得代碼非常精簡,效率也更高。至於如何書寫組件不是本文檔的重點,下面僅給出一個組件的例子並說明邏輯層的調用方法,你會發現其實邏輯層是個官僚,處理層是下屬,呵呵。      1 創建處理層組件    下面的組件是我為公司寫的數據庫處理組件的簡化版本,考慮到篇幅和可讀性等問題,這裡我簡化了它的功能(象數據分頁、批量更新、獲取字段數和字段名稱,用set和get提高其擴展性、對其他連庫方法的支持等都沒有出現在下面的代碼中),使之包含所有常用的功能並使之更加清晰和易於理解;其二,我將連庫動作加到了構造函數中,這是個優點也是個缺點,優點是簡化了連庫動作,缺點是降低了通用性,我沒有添加設置數據源等方法,從而每當變換一次數據庫就需要改寫組件中的連接池名稱,這在做一個固定項目的時候是可以的,如果你需要set數據源,可以自行添加;    ##使用組件的方法:    我這裡說的是使用bean的通用方法,你建立自己的bean目錄可以仿照該例子。在你的站點根目錄下建立resin.conf中指定的存放bean的目錄,我上面的舉例是classes,那你就建立classes目錄,那麼classes就是你站點的class根目錄。然後在下面依次建立com\gledecity\yesgo\sql,注意它們之間是父子關系,不是同級文件夾,然後將下面即將建立的DBBridge.java放到"站點根目錄\classes\com\gledecity\yesgo\sql"目錄下,然後將該文件上傳到服務器端即可。上面的步驟在微軟平台上使用UltraDev之類的開發工具即可完成,當然手工也可以。         源文件如下:      //------------------------------------------------------------------------------    // File: DBBridge.java    // Copyright (c) 2001-2002 Mr.Fengjun Zhao. All Rights Reserved.    // Author: 趙鳳君@06/18/01    // Last Revision: 趙鳳君@01/18/2002    // Description: 數據庫接口類。一個統一的數據庫接口,實現了邏輯層和  數據層的徹底分離,封裝了常用的數據庫操作。主要功能是:連接數據庫、執行SQL語句、數據庫取值操作、數據分頁、清除數據、關閉數據庫等。    // Version:簡化版1.0    //------------------------------------------------------------------------------      //指定包目錄    package com.gledecity.yesgo.sql;      //導入包    import java.sql.* ;    import com.caucho.sql.*;      public class DBBridge {    //聲明屬性    private DBPool pool ;    private Connection conn ;    private ResultSet rs ;    private Statement stmt ;      // -------------------------------------- 構造函數---------------------------------    public DBBridge() {     pool=null ;     conn=null ;     rs=null ;     stmt=null ;     try{open();}      catch(java.sql.SQLException ex){ex.toString();}    }    //       //連接數據庫的方法    public void open()    throws SQLException {     if( conn!=null && !conn.isClosed() )      throw new SQLException( "The connection has been established already." ) ;     clear () ;     pool=new DBPool();     conn = pool.getPool("your_data_source_name").getConnection();    }      //執行SQL語句的方法,將JDBC中的executeQuary()和executeUpdate()兩個方法//合而為一,注意返回值為整形,     public int execSQL( String sqlStmt )    throws SQLException {     if( conn==null conn.isClosed() )      throw new SQLException( "This connection has not been established yet." ) ;     if( sqlStmt==null )      throw new SQLException( "SQL-statement is null." ) ;     clear () ;     conn.setAutoCommit( true ) ;     stmt=conn.createStatement() ;     if( sqlStmt.toUpperCase().startsWith( "SELECT" ) ) {      rs=stmt.executeQuery( sqlStmt ) ;      return -1 ;     }     else {      int numRow=stmt.executeUpdate( sqlStmt ) ;      clear() ;      return num




Copyright © Linux教程網 All Rights Reserved