精华内容
下载资源
问答
  • Java使用C3P0数据库连接池的方法

    千次阅读 2018-01-24 15:52:10
    这样的操作在一般情况下是没什么问题的,但是如果出现频繁的操作就会造成一些性能上的问题,因为频繁打开关闭连接是个耗时的操作,所以就Java目前得最多的是C3P0实现JDBC连接池,由于刚入手Java希望各位小伙伴海涵...

    JAVA基础之利用C3P0实现JDBC连接池,提高数据库处理的能力,加快性能。一般情况下,操作数据库的过程都是连接数据库->执行操作->释放资源。这样的操作在一般情况下是没什么问题的,但是如果出现频繁的操作就会造成一些性能上的问题,因为频繁打开关闭连接是个耗时的操作,所以就Java目前用得最多的是C3P0实现JDBC连接池,由于刚入手Java希望各位小伙伴海涵。

    使用C3P0先得引包:c3p0-0.9.1.2.jar和mysql-connector-java-5.1.39-bin.jar

    编写C3P0配置文件c3p0-config.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <c3p0-config>
        <default-config>
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/test20180109</property>
            <property name="user">root</property>
            <property name="password">root</property>
            <property name="initialPoolSize">5</property>
            <property name="maxPoolSize">20</property>
        </default-config>
        <named-config name="lfriend">
            <property name="driverClass">com.mysql.jdbc.Driver</property>
            <property name="jdbcUrl">jdbc:mysql:///test20180109</property>
            <property name="user">root</property>
            <property name="password">root</property>
        </named-config>
    </c3p0-config>

    编写c3p0工具类

    package me.lfriend.jdbc.utils;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    import javax.sql.DataSource;
    import java.sql.Connection;
    import java.sql.SQLException;
    
    public class C3P0Utils {
        private static ComboPooledDataSource dataSource=new ComboPooledDataSource('lfriend');
        public static DataSource getDataSource(){
            return dataSource;
        }
        public static Connection getConnection(){
            try {
                return dataSource.getConnection();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
    }

    编写测试类TestC3P0.java

    package me.lfriend.jdbc.test;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    import me.lfriend.jdbc.utils.C3P0Utils;
    import me.lfriend.jdbc.utils.JDBCUtils_V3;
    import org.junit.Test;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    
    public class TestC3P0 {
    
        @Test
        public void testAddUser(){
            Connection conn=null;
            PreparedStatement pstmp=null;
            //1.创建自定义连接池对象
            ComboPooledDataSource dataSource=new ComboPooledDataSource();//加载默认配置
            //ComboPooledDataSource dataSource=new ComboPooledDataSource("lfriend");//加载有名称的配置
    
            try {
                //2.从池子中获取连接
                conn=dataSource.getConnection();
                //3.编写sql
                String sql="insert into user values(null,?,?)";
                //4.创建预处理对象
                pstmp=conn.prepareStatement(sql);
                //5.设置参数
                pstmp.setString(1,"piu");
                pstmp.setString(2,"123456");
                //6.执行查询
                int row=pstmp.executeUpdate();
                if(row>0){
                    System.out.println("添加成功!");
                }else{
                    System.out.println("添加失败!");
                }
            }catch (Exception e){
                throw new RuntimeException(e);
            }finally {
                JDBCUtils_V3.release(conn,pstmp,null);
            }
        }
    
        /**
         * 工具类使用C3P0
         */
        @Test
        public void testAddUser1(){
            Connection conn=null;
            PreparedStatement pstmp=null;
            try {
                conn= C3P0Utils.getConnection();
                //3.编写sql
                String sql="insert into user values(null,?,?)";
                //4.创建预处理对象
                pstmp=conn.prepareStatement(sql);
                //5.设置参数
                pstmp.setString(1,"piu");
                pstmp.setString(2,"123456");
                //6.执行查询
                int row=pstmp.executeUpdate();
                if(row>0){
                    System.out.println("添加成功!");
                }else{
                    System.out.println("添加失败!");
                }
            }catch (Exception e){
                throw new RuntimeException(e);
            }finally {
                JDBCUtils_V3.release(conn,pstmp,null);
            }
        }
    }

    C3P0的基本操作就是这样,欢迎各位大佬指出问题!

    展开全文
  • 这样的操作在一般情况下是没什么问题的,但是如果出现频繁的操作就会造成一些性能上的问题,因为频繁打开关闭连接是个耗时的操作,所以就Java目前得最多的是C3P0实现JDBC连接池,由于刚入手Jav...

    因不想继续在PHP花更多的时间,所以入手JAVA,从零学至此利用C3P0实现JDBC连接池,提高数据库处理的能力,加快性能。一般情况下,操作数据库的过程都是连接数据库->执行操作->释放资源。这样的操作在一般情况下是没什么问题的,但是如果出现频繁的操作就会造成一些性能上的问题,因为频繁打开关闭连接是个耗时的操作,所以就Java目前用得最多的是C3P0实现JDBC连接池,由于刚入手Java希望各位小伙伴海涵。

    使用C3P0先得引包:c3p0-0.9.1.2.jar和mysql-connector-java-5.1.39-bin.jar

    编写C3P0配置文件c3p0-config.xml<?xml  version="1.0" encoding="UTF-8" ?>            com.mysql.jdbc.Driver        jdbc:mysql://localhost:3306/test20180109        root        root        5        20                com.mysql.jdbc.Driver        jdbc:mysql:///test20180109        root        root    

    编写c3p0工具类package me.lfriend.jdbc.utils;import com.mchange.v2.c3p0.ComboPooledDataSource;import javax.sql.DataSource;import java.sql.Connection;import java.sql.SQLException;public class C3P0Utils {    private static ComboPooledDataSource dataSource=new ComboPooledDataSource('lfriend');    public static DataSource getDataSource(){        return dataSource;    }    public static Connection getConnection(){        try {            return dataSource.getConnection();        } catch (SQLException e) {            throw new RuntimeException(e);        }    }}

    编写测试类TestC3P0.javapackage me.lfriend.jdbc.test;import com.mchange.v2.c3p0.ComboPooledDataSource;import me.lfriend.jdbc.utils.C3P0Utils;import me.lfriend.jdbc.utils.JDBCUtils_V3;import org.junit.Test;import java.sql.Connection;import java.sql.PreparedStatement;public class TestC3P0 {    @Test    public void testAddUser(){        Connection conn=null;        PreparedStatement pstmp=null;        //1.创建自定义连接池对象        ComboPooledDataSource dataSource=new ComboPooledDataSource();//加载默认配置        //ComboPooledDataSource dataSource=new ComboPooledDataSource("lfriend");//加载有名称的配置        try {            //2.从池子中获取连接            conn=dataSource.getConnection();            //3.编写sql            String sql="insert into user values(null,?,?)";            //4.创建预处理对象            pstmp=conn.prepareStatement(sql);            //5.设置参数            pstmp.setString(1,"piu");            pstmp.setString(2,"123456");            //6.执行查询            int row=pstmp.executeUpdate();            if(row>0){                System.out.println("添加成功!");            }else{                System.out.println("添加失败!");            }        }catch (Exception e){            throw new RuntimeException(e);        }finally {            JDBCUtils_V3.release(conn,pstmp,null);        }    }    /**     * 工具类使用C3P0     */    @Test    public void testAddUser1(){        Connection conn=null;        PreparedStatement pstmp=null;        try {            conn= C3P0Utils.getConnection();            //3.编写sql            String sql="insert into user values(null,?,?)";            //4.创建预处理对象            pstmp=conn.prepareStatement(sql);            //5.设置参数            pstmp.setString(1,"piu");            pstmp.setString(2,"123456");            //6.执行查询            int row=pstmp.executeUpdate();            if(row>0){                System.out.println("添加成功!");            }else{                System.out.println("添加失败!");            }        }catch (Exception e){            throw new RuntimeException(e);        }finally {            JDBCUtils_V3.release(conn,pstmp,null);        }    }}

    C3P0的基本操作就是这样,欢迎各位大佬指出问题!

    展开全文
  • 这两天在对照几个典型的.net网站的时候,发现了一个小小的问题,大家在对数据库操作的时候经常会用到SqlDataReader,这个方法在调用完之后是要及时关闭的,问题就是什么时候关闭是合适的?  为了这个...

    这两天在对照几个典型的.net网站的时候,发现了一个小小的问题,大家在对数据库操作的时候经常会用到SqlDataReader,这个方法在调用完之后是要及时关闭的,问题就是什么时候关闭是合适的?

        为了这个问题我专门上微软的官方论坛找了点东西,我在这里和我平时用的稍微的对比了一下

          我们平时用方法一般是(至少我以前看到的是的,特别是很多.net书籍上):

    /// <summary>
    ///
    常见的获取SqlDataReader方法
    ///
    通常的数据访问层都会提供这个方法
    /// </summary>
    static SqlDataReader GetReader()
    {
    //
    通过连接字符串获取连接
    SqlConnection con = new SqlConnection(conn_String);
    try
    {
    //
    打开连接,执行查询
    //
    并且返回SqlDataReader
    con.Open();
    SqlCommand cmd = con.CreateCommand();
    cmd.CommandText = Sql;
    SqlDataReader dr = cmd.ExecuteReader();
    return dr;
    }
    finally
    {
    //
    这里的代码就是问题所在

    //
    如果这里执行关闭:

    con.Close();

    //那返回的SqlDataReader将毫无用处,因为其
    //
    依赖的连接已经关闭
    //
    如果这里不执行con.Close();那返回后该连接将永远无法关闭,因为调用方无法
    //
    得到连接对象
    }
    }

     

    我在微软的官方实例petshop中看的方法却是:

    static SqlDataReader GetReader_CloseConnection(SqlConnection con)
    {
    try
    {
    //
    打开连接,执行查询
    //
    并且返回SqlDataReader
    con.Open();
    SqlCommand cmd = con.CreateCommand();
    cmd.CommandText = Sql;
    SqlDataReader dr = cmd.ExecuteReader
    (CommandBehavior.CloseConnection);
    return dr;
    }
    finally
    {
    //不需要使用con.Close();
    }
    }

    我找了找CommandBehavior.CloseConnection的作用

    CommandBehavior.CloseConnection功能恰好就是为了避免类似的尴尬境地,它能够保证当SqlDataReader对象被关闭时,其依赖的连接也会被自动关闭。

    只需要在使用DataReader对象之后的时候,将DataReader对象关闭即可,这样conn就自己关闭了。找了个小例子:

    /// <summary>
    ///
    测试方法
    /// </summary>
    static void Main(string[] args)
    {
    //
    建立连接
    SqlConnection con = new SqlConnection(conn_String);
    try
    {
    //
    测试使用了CommandBehavior.CloseConnection的方法
    Console.WriteLine("
    测试使用了CommandBehavior.
    CloseConnection
    的方法:
    ");
    SqlDataReader sdr = GetReader_CloseConnection(con);
    while (sdr.Read()) { }
    sdr.Close();
    Console.WriteLine("
    读取完毕后的连接状态:
    " + con.State.ToString());
    //
    测试没有使用CommandBehavior.CloseConnection的方法

    Console.WriteLine("
    测试没有使用CommandBehavior.
    CloseConnection
    的方法:
    ");
    SqlDataReader sdr1 = GetReader_NoCloseConnection(con);
    while (sdr1.Read()) { }
    sdr1.Close();
    Console.WriteLine("
    读取完毕后的连接状态:
    " +
    con.State.ToString());
    Console.Read();
    }
    finally
    {
    //
    确保连接被关闭

    if (con.State != ConnectionState.Closed)
    con.Close();
    }
    }

     

    读取完毕后的连接状态:Closed

    测试没有使用CommandBehavior.CloseConnection的方法:

    读取完毕后的连接状态:Open

    正如读者所看到的,使用了CommandBehavior.CloseConnection得到的SqlDataReader对象,在关闭的同时会自动地关闭其依赖的数据库连接对象,这个特性解决了数据访问层编写中的困境。

    展开全文
  • 2011年5月22日 这两天在对照几个典型的.net网站的时候,发现了一个小小的问题,大家在对数据库操作的时候经常会用到SqlDataReader,这个方法在调用完之后是要及时关闭的,问题就是什么时候关闭是合适的? 为了这个...
    2011年5月22日 这两天在对照几个典型的.net网站的时候,发现了一个小小的问题,大家在对数据库操作的时候经常会用到SqlDataReader,这个方法在调用完之后是要及时关闭的,问题就是什么时候关闭是合适的?

    为了这个问题我专门上微软的官方论坛找了点东西,我在这里和我平时用的稍微的对比了一下


    我们平时用方法一般是(至少我以前看到的是的,特别是很多.net书籍上):





    /// <summary>
    /// 常见的获取SqlDataReader方法
    /// 通常的数据访问层都会提供这个方法
    /// </summary>
    static SqlDataReader GetReader()
    {
       
    //通过连接字符串获取连接
        SqlConnection con = new SqlConnection(conn_String);
       
    try
        {
           
    //打开连接,执行查询
           
    //并且返回SqlDataReader
            con.Open();
            SqlCommand cmd
    = con.CreateCommand();
            cmd.CommandText
    = Sql;
            SqlDataReader dr
    = cmd.ExecuteReader();
           
    return dr;
        }
       
    finally
        {
           
    //这里的代码就是问题所在
           
    //如果这里执行关闭:

            con.Close();

           
    //那返回的SqlDataReader将毫无用处,因为其
           
    //依赖的连接已经关闭
           
    //如果这里不执行con.Close();那返回后该连接将永远无法关闭,因为调用方无法
           
    //得到连接对象
        }
    }

    我在微软的官方实例petshop中看的方法却是:




    static SqlDataReader GetReader_CloseConnection(SqlConnection con)
        {
           
    try
            {
               
    //打开连接,执行查询
               
    //并且返回SqlDataReader
                con.Open();
                SqlCommand cmd
    = con.CreateCommand();
                cmd.CommandText
    = Sql;
                SqlDataReader dr
    = cmd.ExecuteReader(CommandBehavior.CloseConnection);
               
    return dr;
            }
           
    finally
            {
               
    //不需要使用con.Close();
            }
        }

    我找了找CommandBehavior.CloseConnection的作用


    CommandBehavior.CloseConnection的功能恰好就是为了避免类似的尴尬境地,它能够保证当SqlDataReader对象被关闭时,其依赖的连接也会被自动关闭。


    只需要在使用DataReader对象之后的时候,将DataReader对象关闭即可,这样conn就自己关闭了。找了个小例子:





    /// <summary>
    /// 测试方法
    /// </summary>
    static void Main(string[] args)
    {
       
    //建立连接
        SqlConnection con = new SqlConnection(conn_String);
       
    try
        {
           
    //测试使用了CommandBehavior.CloseConnection的方法
            Console.WriteLine("测试使用了CommandBehavior.CloseConnection的方法:");
            SqlDataReader sdr
    = GetReader_CloseConnection(con);
           
    while (sdr.Read()) { }
            sdr.Close();
            Console.WriteLine(
    "读取完毕后的连接状态:" + con.State.ToString());
           
    //测试没有使用CommandBehavior.CloseConnection的方法
            Console.WriteLine("测试没有使用CommandBehavior.CloseConnection的方法:");
            SqlDataReader sdr1
    = GetReader_NoCloseConnection(con);
           
    while (sdr1.Read()) { }
            sdr1.Close();
            Console.WriteLine(
    "读取完毕后的连接状态:" +
            con.State.ToString());
            Console.Read();
        }
       
    finally
        {
           
    //确保连接被关闭
            if (con.State != ConnectionState.Closed)
                con.Close();
        }
    }

    读取完毕后的连接状态:Closed


    测试没有使用CommandBehavior.CloseConnection的方法:


    读取完毕后的连接状态:Open


    正如读者所看到的,使用了CommandBehavior.CloseConnection得到的SqlDataReader对象,在关闭的同时会自动地关闭其依赖的数据库连接对象,这个特性解决了数据访问层编写中的困境。


    转自:http://hi.baidu.com/516%D0%A1%C5%DA/blog/item/30a79ede7738d51962279808.html

    我是指针,却丢失了目标地址! 我是循环,却缺少了结束条件! 我是函数,却没有人来调用!
    展开全文
  • MYSQL网络数据库PDF学习资源

    热门讨论 2009-08-09 19:56:31
    2.3.4 希望对值进行什么样的比较 87 2.3.5 计划对列进行索引吗 87 2.3.6 列类型选择问题的相互关联程度 88 2.4 表达式求值和类型转换 88 2.4.1 撰写表达式 89 2.4.2 类型转换 94 第3章 MySQL SQL 语法及其用法 99 ...
  • 书中内容主要集中在大多数企业常见的问题之上,如安装和升级到oracle database 11g数据库软件、创建数据库、导出和导入数据、数据库的备份与恢复、性能调优,等等。  本书还提供了dba完成本职工作必备的基本的uniix...
  • 深入浅出MySQL数据库开发、优化与管理维护

    千次下载 热门讨论 2014-01-21 15:48:01
     18.1 优化SQL语句的一般步骤   18.1.1 通过showstatus命令了解各种SQL的执行频率   18.1.2 定位执行效率较低的SQL语句   18.1.3 通过EXPLAIN分析低效SQL的执行计划   18.1.4 确定问题并采取相应的...
  • 测试的时候发现如果数据库没有启动或中途关关闭的话,程序会直接卡死或退出,本人的想法是每次连接数据库的时候try catch之类的语句测试一下,不让程序卡死影响其它的功能,但是这样好像比较费性能,由于没有参与...
  • 用到了hibernate+spring的话,一般我们直接getHibernateTemplate().find("from User")这类型的查询。 单是现在我项目里面程序用到这个类型的: Session s = super.getSession(); ...
  • 所以只有第一种方法,将该语句也放到if 语句中,而在else 语句中用else return 0; ,这样如果enterBtn 没有被按下,那么程序就会结 束执行了。 到这里,我们就实现了一个界面结束执行,然后弹出另一个 界面的程序...
  • 就比如,数据库连接池的应用,一般老说,我们数据库连接,将会调用close()方法,将该连接关闭,但是在连接池中,应该是将数据库连接归还给连接池,而不是直接关闭,以达到统一管理的目的,这就需要我们去代理...
  • 接口的意义(转)

    2019-07-09 01:19:56
    接口的作用简单一点就是:接口是用来标记类的,...问题:现在我们要写个连接数据库的类给用户使用,有两个函数:一个返回Connection对象,另一个是关闭数据库,close(),一般的解决方法是:给每个数据库写一个类,再根据...
  • 接口的作用

    2009-09-11 16:53:00
    接口的作用简单一点就是:接口... 使用接口解决问题 问题:现在我们要写个连接数据库的类给用户使用,有两个函数:一个返回Connection对象,另一个是关闭数据库,close(),一般的解决方法是:给每个数据库写一个类,再根据
  • java接口的作用

    2008-11-29 13:08:29
    接口的作用简单一点就是:接口是用来标记类...问题:现在我们要写个连接数据库的类给用户使用,有两个函数:一个返回Connection对象,另一个是关闭数据库,close(),一般的解决方法是:给每个数据库写一个类,再根据...
  • final 关键字首先,我们先来区分一下,final finally关键字与finalize()方法之间的区别。他们三者唯一的相同点就是都是...所以一般关于各种流、数据库连接的关闭还有lock的unlock操作都写在该代码块中。 finalize
  • 面试官:那有什么方法可以防止用户修改cookie? 我:加密吧... 面试官:怎么弄? 我:我说 把信息变成字符串,然后加密下,到服务器上再解密 面试官:那不是还没解决这个问题? 我想了想 ,最后说不...
  • 2.1.5 堆栈溢出一般是由什么原因导致的? 2.1.6 什么函数不能声明为虚函数? 2.1.7 冒泡排序算法的时间复杂度是什么? 2.1.8 写出float x 与“零值”比较的if语句 2.1.9 Internet采用哪种网络协议?该协议的主要...
  • spring 的事物配置

    2010-01-12 19:39:11
    顺便提下,是不是加入事物管理了dao层方法中的数据库连接就不会关闭。因为我开始一个查询blob属性,查询没加入事物时,会报链接关闭的异常,安照网上说法,加入事物就好了。 [b]问题补充:[/b] 数据库连接池当然...
  • 如果各位想其他数据库,可以自己加载其他数据库的驱动,并修改一下DbOption类下的getTableColumns(String)方法中的查询表信息方法 以及添加类似dm2java.properties数据库类型到java数据类型的映射文件,不同数据库...
  • Python基础教程 第二版

    2018-04-04 12:35:58
    9.2.1 重写一般方法和特殊的构造方法 9.2.2 调用未绑定的超类构造方法 9.2.3 使用super、函数 9.3 成员访问 9.3.1 基本的序列和映射规则 9.3.2 子类化列表,字典和字符串 9.4 更多魔力 9.5 属性 9.5.1 property函数 ...
  • 11..net做B/S结构的系统,您是几层结构来开发,每一层之间的关系以及为什么要这样分层? 答:一般为3层 数据访问层,业务层,表示层。 数据访问层对数据库进行增删查改。 业务层一般分为二层,业务表观层...
  • §12.3.6 一般的SQL语句优化 143 §12.4 SQL语句优化技巧 144 §12.4.1 对所有SQL语句执行EXPLAIN_PLAN 145 §12.4.2 磁盘读和缓冲区获取 146 §12.4.3 判定式崩溃 146 §12.5 使用EXISTS和IN 148 §12.6 分离事务...
  • jdbc基础和参考

    2014-01-08 13:04:17
    线程安全的,一个数据库对应一个Sessionfactory(一般一个应用程序对应一个SessionFactory就够了) 3.是一个很大的缓存,本身维护了一个可配置的二级缓存 4.用来构建Session对象 Configuration 1.启动和配置...
  • 2、 在结构化方法中,数据流程图(DFD)作为描述工具的软件开发阶段是()。 A、 可行性分析 B、需求分析 C、详细设计 D、程序编码 我的答案:B 3、 结构化程序设计主要强调的是()。 A、 程序的规模 B、...
  • MySQL命令大全

    2018-01-15 11:19:17
    mysqldump -u 名 -p –default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1) mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql 2.导出一个表 mysqldump -u 用户名 -p 数据库名 表名...
  • finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 16、sleep() 和 wait() 有什么区别? sleep是线程类(Thread)...
  • 15.5.2 及时地关闭数据库连接 563 15.5.3 跟踪监视SQL Server当前链接池状态 564 15.5.4 善用数据库的存储过程 567 15.5.5 SqlDataRead和Dataset的选择 567 15.5.6 ExecuteNonQuery和 ExecuteScalar的选择 568 15.5....

空空如也

空空如也

1 2 3 4 5
收藏数 92
精华内容 36
关键字:

关闭数据库一般用什么方法