JDBC连接池C3P0&&Druid&&自定义工具类

C3P0:数据库连接池技术

package cn.itcast.JDBClian_jie_chi.C3P0;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

/*
* 数据库连接池
* 概念:使用一个容器(集合)存放数据库连接的容器
    *    当系统初始化之后,容器被创建,容器会申请一些对象,当用户来访问数据库时,从容器中获取连接对象
    * 用户访问完成后会将对象归还给容器
  好处:
    节约资源
    用户不用反复向操作系统申请连接比较高效
  实现:
    标准接口:DataSource javax.sql包下的
        方法:
            获取连接:getConnection();
            归还连接:Connection.close().如果对象是Connection是从连接池获取的那么
                     调用Connection.close()方法不会在关闭连接,而是归还连接
         一般对于该接口的实现是由数据库厂商来实现的
            1·C3P0:数据库连接池技术
                ··实现步骤
                    导入jar包 c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar
                ··定义配置文件
                     名称: c3p0.properties 或者 c3p0-config.xml这样的话可以自动寻找到
                     路径:直接将文件放在src目录下即可。
                ··创建核心对象,数据库连接池对象 ComboPooledDataSource
                ··获取连接: getConnection
             2·Druid:数据库连接池技术
                实现步骤
                    导入jar包 druid-1.0.9
                定义配置文件
                    是properties形式的
                    可以是任意名称,在任意目录之下手动导入
                加载配置文件
                 获取数据库连接池:通过工厂类来获取 DruidDataSourceFactory
                 获取连接:getConnection
            3·定义Diruid工具类
                1 定义一个类JDBCUtils
                2 提供静态代码块加载配置文件,初始化连接对象
                3 提供方法
                    获取连接方法:通过数据库连接池连接
                    释放资源
                    获取连接池方法

*
* */
//c3p0演示
public class lianjiechi1 {
    public static void main(String[] args) throws SQLException {
        //要记着把数据库的驱动jar包也导入
        //1·创建数据库连接池对象
        DataSource ds = new ComboPooledDataSource ();
        Connection conn=null;
        try {
            //2·获取连接对象
           conn = ds.getConnection ();
            System.out.println (conn);
        } catch (SQLException e) {
            e.printStackTrace ();
        }finally {
            conn.close ();
        }

    }
}

Druid:数据库连接池技术

package cn.itcast.JDBClian_jie_chi.Druid;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;

public class Druid01 {
    public static void main(String[] args) throws Exception {
        //加载配置文件
        Properties ps = new Properties ();
        InputStream is = Druid01.class.getClassLoader ().getResourceAsStream ("druid.properties");
        ps.load (is);
        //获取连接对象
        DataSource ds = DruidDataSourceFactory.createDataSource (ps);
        //获取方法
        Connection conn = ds.getConnection ();
        System.out.println (conn);

    }


}

定义Diruid工具类

package cn.itcast.JDBClian_jie_chi.Utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/*
* Druid 连接池工具类
* */
public class Utils {
    //定义成员变量
    private static DataSource ds;
    //加载配置文件的静态代码块
    static {
        Properties ps = new Properties ();
        InputStream is = Utils.class.getClassLoader ().getResourceAsStream ("druid.properties");
        try {
            ps.load (is);
            //获取DataSource
            ds = DruidDataSourceFactory.createDataSource (ps);
        } catch (IOException e) {
            e.printStackTrace ();
        } catch (Exception e) {
            e.printStackTrace ();
        }
    }

    //获取连接的方法
    public static Connection getConnection() throws SQLException {
            return ds.getConnection ();
    }
    //释放资源的方法
    public static  void close(Statement sta,Connection conn){
        if(sta!=null){
            try {
                sta.close ();
            } catch (SQLException e) {
                e.printStackTrace ();
            }
        }
        if(conn!=null){
            try {
                conn.close ();
            } catch (SQLException e) {
                e.printStackTrace ();
            }
        }

    }
    //重载释放资源的方法
    public static void close(ResultSet rs,Statement sta,Connection conn){
        if(rs!=null){
            try {
                rs.close ();
            } catch (SQLException e) {
                e.printStackTrace ();
            }
        }
        close (sta,conn);

    }
    //返回连接池
    public static  DataSource getDataSource(){
        return ds;
    }

}

工具类的使用

package cn.itcast.JDBClian_jie_chi.Druid;
import cn.itcast.JDBClian_jie_chi.Utils.Utils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/*
* 使用工具类
* */
public class Druid02 {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            //获取连接
            conn = Utils.getConnection ();
            //编写Sql语句、
            String sql = "insert into account values(null,?,?)";
            //获取数据库操作对象
            ps = conn.prepareStatement (sql);
            //给问号赋值
            ps.setString (1,"wangwu");
            ps.setInt (2,3000);
            //执行语句
           int count = ps.executeUpdate ();
            System.out.println (count);

        } catch (SQLException e) {
            e.printStackTrace ();
        }finally {
            Utils.close (ps,conn);
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jdbc开发项目的工具包,采用数据库连接池c3p0 恶意脚本过滤器,采用‘装饰者设计模式’增强类功能~~,过滤恶意脚本 /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package cn.secondteam.utils; import java.io.IOException; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 恶意脚本字符过滤器 * @author Administrator * */ public class CharFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { final HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; chain.doFilter((ServletRequest) Proxy.newProxyInstance(CharFilter.class.getClassLoader(),request.getClass().getInterfaces(), new InvocationHandler(){ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if(method.getName().equals("getParameter")){ return formatHTML((String)method.invoke(request, args)); } return method.invoke(request, args); } }), res); } public void init(FilterConfig filterConfig) throws ServletException { } private String formatHTML(String str) { if(str==null){ return null; } str = str.replaceAll("<sc", "<sc"); str = str.replaceAll("</sc", ">/sc"); //str = str.replaceAll(">", ">"); return str; } public void destroy() { // TODO Auto-generated method stub } }
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值