• 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);
                    }

    结果:

  • 相关阅读:
    springcloud概述
    springcloud-微服务架构基础
    TypeScript 教程
    提示工具以及弹出框
    Bootstrap 弹出框(Popover)插件
    JavaScript JSON
    JavaScript常见基础函数
    7种JavaScript代码调试的方法
    Bootstrap 网格系统
    文本元素
  • 原文地址:https://www.cnblogs.com/zhangyouwu/p/9399885.html
Copyright © 2020-2023  润新知