java使用數據庫連接池


連接池的實現方式是首先使用JNDI(JavaTM Naming and Directory Interface) 將數據源對象注冊為一個命名服務,然后使用JNDI提供的服務接口,按照名稱檢索對應的數據源。

查找數據源的方法:
1、創建一個命名服務環境(Context)。
2、利用該環境對象的lookup方法按名查詢,得到相應數據源對象。
3、調用數據源對象的getConnection方法獲取與數據庫的連接。

第一步:Tomcat 安裝目錄下的confcontext.xml <Context></Context>中添加代碼:

修改context.xml文件加入如下代碼:

 

<Context>
  <Resource
    name="jdbc/cartds"
    type="javax.sql.DataSource"
    password=""
    driverClassName="com.mysql.jdbc.Driver"
    maxIdle="20"
    maxWait="5000"
    username="root"
    url="jdbc:mysql://localhost:3306/logistic"
   />
</Context>

 

第二步:

將相關的數據庫驅動程序放置在項目中lib文件夾中。例如:庫包中mysql包,並加入libraries

第三步

配置web.xml文件
<!-- JNDI -->
  <resource-ref>
    <description>MySQL DB Connection Pool</description>
    <res-ref-name>jdbc/cartds</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
  </resource-ref>
 
紅色字體與Java文件中的必需一致,編譯時時通過這些描述符來實現映射
java:comp/env/jdbc/DBPool(虛地址)   ------>    映射描述符   ------>        jdbc/DBPool(實際的地址)

 第四步

創建DBcart.java

package zyw;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.Vector;

public class DBcart
{
    //定義每頁顯示商品的數量
    private static int span=2;

    public static int getSpan()
    {
        return span;
    }

    public static void setSpan(int i)
    {
        span = i;
    }

    public static Vector<String> getInfo(String sql)
    {
        Vector<String> vclass = new Vector<String>();
        try
        {
            //初始化上下文
            Context initial = new InitialContext();
            //其中mysql為數據源jndi名稱
            DataSource ds = (DataSource)initial.lookup("java:comp/env/jdbc/cartds");
            //得到連接
            Connection con=ds.getConnection();
            //聲明語句
            Statement st = con.createStatement();
            //執行語句得到結果集
            ResultSet rs = st.executeQuery(sql);
            while(rs.next())
            {
                String str = rs.getString(1);
                str = new String(str.getBytes("ISO-8859-1"),"gb2312");
                vclass.add(str);
            }
            //關閉結果集,語句
            rs.close();
            st.close();
            //歸還連接
            con.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return vclass;
    }

    public static boolean isLegal(String sql)
    {
        boolean flag = false;
        try
        {
            //初始化上下文
            Context initial = new InitialContext();
            //其中mysql為數據源jndi名稱
            DataSource ds = (DataSource)initial.lookup("java:comp/env/jdbc/cartds");
            //得到連接
            Connection con=ds.getConnection();
            //聲明語句
            Statement st = con.createStatement();
            //執行語句得到結果集
            ResultSet rs = st.executeQuery(sql);
            if(rs.next())
            {
                flag = true;
            }
            rs.close();
            st.close();
            con.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return flag;
    }

    public static int getID(String tname,String colname)
    {
        int id = 0;
        try
        {
            //初始化上下文
            Context initial = new InitialContext();
            //其中mysql為數據源jndi名稱
            DataSource ds = (DataSource)initial.lookup("java:comp/env/jdbc/cartds");
            //得到連接
            Connection con=ds.getConnection();
            //聲明語句
            Statement st = con.createStatement();
            String sql = "select Max("+colname+") from "+tname;
            //執行語句得到結果集
            ResultSet rs = st.executeQuery(sql);
            if(rs.next())
            {
                id = rs.getInt(1);
            }
            id++;
            rs.close();
            st.close();
            con.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return id;
    }

    public static int updateTable(String sql)
    {
        int i = 0;
        try
        {
            //初始化上下文
            Context initial = new InitialContext();
            //其中mysql為數據源jndi名稱
            DataSource ds = (DataSource)initial.lookup("java:comp/env/jdbc/cartds");
            //得到連接
            Connection con=ds.getConnection();
            //聲明語句
            Statement st = con.createStatement();
            //更新表
            i = st.executeUpdate(sql);
            //關閉語句
            st.close();
            //歸還連接
            con.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return i;
    }


    public static Vector<String[]> getInfoArr(String sql)
    {
        Vector<String[]> vtemp = new Vector<String[]>();
        try
        {
            //初始化上下文
            Context initial = new InitialContext();
            //其中mysql為數據源jndi名稱
            DataSource ds = (DataSource)initial.lookup("java:comp/env/jdbc/cartds");
            //得到連接
            Connection con=ds.getConnection();
            //聲明語句
            Statement st = con.createStatement();
            //執行語句得到結果集
            ResultSet rs = st.executeQuery(sql);
            //獲取結果集的元數據
            ResultSetMetaData rsmt = rs.getMetaData();
            //得到結果集中的總列數
            int count = rsmt.getColumnCount();
            while(rs.next())
            {
                String[] str = new String[count];
                for(int i=0;i<count;i++)
                {
                    str[i] = rs.getString(i+1);
                    str[i] = new String(str[i].getBytes("ISO-8859-1"),"gb2312");
                }
                vtemp.add(str);
            }
            rs.close();
            st.close();
            con.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return vtemp;
    }

    public static int getTotalPage(String sql)
    {
        int totalpage = 1;
        try
        {
            //初始化上下文
            Context initial = new InitialContext();
            //其中mysql為數據源jndi名稱
            DataSource ds = (DataSource)initial.lookup("java:comp/env/jdbc/cartds");
            //得到連接
            Connection con=ds.getConnection();
            //聲明語句
            Statement st = con.createStatement();
            //執行語句得到結果集
            ResultSet rs = st.executeQuery(sql);
            rs.next();
            //得到總記錄條數
            int rows = rs.getInt(1);
            totalpage = rows/span;
            if(rows%span!=0)
            {
                totalpage++;
            }
            //關閉結果集,語句
            rs.close();
            st.close();
            //歸還連接
            con.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return totalpage;
    }

    public static Vector<String[]> getPageContent(int page,String sql)
    {
        Vector<String[]> vcon = new Vector<String[]>();
        try
        {
            //初始化上下文
            Context initial = new InitialContext();
            //其中mysql為數據源jndi名稱
            DataSource ds = (DataSource)initial.lookup("java:comp/env/jdbc/cartds");
            //得到連接
            Connection con=ds.getConnection();
            //聲明語句
            Statement st = con.createStatement();
            //執行語句得到結果集
            ResultSet rs = st.executeQuery(sql);
            //獲取結果集的元數據
            ResultSetMetaData rsmt = rs.getMetaData();
            //得到結果集中的總列數
            int count = rsmt.getColumnCount();
            int start = (page-1)*span;
            if(start!=0)
            {
                rs.absolute(start);
            }
            int temp=0;
            while(rs.next()&&temp<span)
            {
                temp++;
                String[] str = new String[count];
                for(int i=0;i<str.length;i++)
                {
                    str[i] = rs.getString(i+1);
                    //轉碼
                    str[i] = new String(str[i].getBytes("ISO-8859-1"),"gb2312");
                }
                vcon.add(str);
            }
            //關閉結果集,語句
            rs.close();
            st.close();
            con.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return vcon;
    }

    public static int getSelectId(String sql)
    {
        int id = 0;
        try
        {
            //初始化上下文
            Context initial = new InitialContext();
            //其中mysql為數據源jndi名稱
            DataSource ds = (DataSource)initial.lookup("java:comp/env/jdbc/cartds");
            //得到連接
            Connection con=ds.getConnection();
            //聲明語句
            Statement st = con.createStatement();
            sql = new String(sql.getBytes(),"ISO-8859-1");
            //執行語句得到結果集
            ResultSet rs = st.executeQuery(sql);
            rs.next();
            id = rs.getInt(1);
            rs.close();
            st.close();
            con.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return id;
    }

    public static boolean batchSql(String[] sql)
    {
        boolean flag = true;
        Connection con = null;
        try
        {
            //初始化上下文
            Context initial = new InitialContext();
            //其中mysql為數據源jndi名稱
            DataSource ds = (DataSource)initial.lookup("java:comp/env/jdbc/cartds");
            //得到連接
            con=ds.getConnection();
            //禁用自動提交模式,並開始一個事務
            con.setAutoCommit(false);
            //聲明語句
            Statement st = con.createStatement();
            for(String str:sql)
            {
                str = new String(str.getBytes(),"ISO-8859-1");
                //添加批處理中的sql
                st.addBatch(str);
            }
            //執行批處理
            st.executeBatch();
            //將事物提交
            con.commit();
            //恢復自動提交模式
            con.setAutoCommit(true);
            st.close();
        }
        catch(Exception e)
        {
            flag = false;
            try
            {
                //事務回滾
                con.rollback();
            }
            catch(Exception ee)
            {
                ee.printStackTrace();
            }
        }
        finally
        {
            try
            {
                con.close();
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
        return flag;
    }
}

第五步

測試,核心代碼

          //插入用戶注冊信息
                String temp = "insert into UserInfo(Uid,Uname,Upwd,Uemail) "+
                        "values("+uid+",'"+uname+"','"+fpwd+"','"+email+"')";
                int i = DBcart.updateTable(temp);
                if(i==0)
                {//沒有插入數據庫
                    String msg = "對不起,注冊失敗,請重新注冊!!!";
                    pageForward(msg,request,response);
                }
                else
                {
                    String msg = "恭喜您,注冊成功!!!";
                    pageForward(msg,request,response);
                }

結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM