浅谈使用JAVA程序连接数据库的几种方式 jdbc,dbcp,c3p0,druid。

使用java程序连接mysql数据库,实现java程序操作数据库中的数据

  • 概述

    • 本文浅谈如何使用java程序操作mysql数据库的方法。首先,连接数据库的方法有ODBC(开放数据库连接(Open Database Connectivity))和JDBC(Java DataBase Connectivity,java数据库连接)两种方式,日常开发中主要使用jdbc来操作,所以本文主要讲述jdbc的使用。
    • 要使用java程序操作数据库,首先需要导入mysql为我们提供的jar包。这些包可以在https://dev.mysql.com/downloads/connector/j/这个网页上下载。将下载好的jar包导入项目中操作如下:将jar包复制到项目目录下在jar包上右键选择Add as Library导入
    • 方式一,最基础的方式,代码如下:使用Class.forName()加载参数指定的类,并且初始化它,新建一个msql的driver对象,并将其注册到DriverManager中去。这种方式比较简单。
static {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("驱动加载成功");
        } catch (ClassNotFoundException e) {
            System.out.println("驱动加载失败");
            e.printStackTrace();
        }
    }
    public Connection getConnection(){
        Connection connection = null;
        try {
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123456");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
  • 测试方法如下。

  • 方式二

    • 使用dbcp((DataBase Connection Pool)数据库连接池)的方式,在创建新的数据库连接时是比较耗费资源的,并且在使用结束后,我们也需要将资源关闭。频繁的创建会比较耗费资源,所以我们在这里介绍这种数据库连接池的方式,他的优点是通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。缺点是存在BUG,在某些种情会产生很多空连接不能释放,并且没有即时监控连接池状态的功能。
      他要使用需要依赖这两个jar包commons-pool-1.3.jar commons-dbcp-1.2.jar这两个jar包
      使用dbcp有两种加载配置文件的方式

    -在项目的目录下创建一个以.properties结尾的配置文件,内容如下:

driverClassName=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/test

username=root

password=123456

initialSize=30     //这项是设置初始连接池的大小

**注意:**这个配置文件中的key的名字不可修改固定这样写,修改的话,加载时会找不到这个key会出错。其它一些设置的key如果需要使用可自行查找配置。

  • 创建连接的代码如下:
 public Connection getConnection() throws Exception {
        //创建文件输入流对象,引入配置文件
        FileInputStream file = new FileInputStream("./src/com/wdhcr/dbcp/db.properties");
        Properties properties = new Properties();
        //加载配置文件
        properties.load(file);
        //通过数据源工厂创建一个数据源
        DataSource dataSource = BasicDataSourceFactory.createDataSource(properties);
        //获取一个连接
        return dataSource.getConnection();
    }

以上就是使用dbcp的方式创建数据库连接,但是他bug多,目前已经不太使用这种方式了,测试方式与方式一的方法一样。

  • 测试方法如下。
  • 方式三
    • 使用c3p0(开源的JDBC连接池),C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。
    • C3P0相对于DBCP
      dbcp没有自动回收空闲连接的功能
      c3p0有自动回收空闲连接功能
    • 实现所需要的jar包
      mchange-commons-java-0.2.3.4.jar
      c3p0-0.9.2.1.jar
      mysql-connector-java-5.1.38-bin.jar
    • 下载地址:http://www.mvnrepository.com/可以在这个网页搜索下载。
    • C3P0的四种实现方式
    • 方式一:在代码中写死数据库配置信息 ,这种方式不利于后期用户修改,修改比较麻烦,所以不建议使用,本文只是介绍它的实现实现方式,代码如下:
 public Connection getConnection() {
        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
        Connection connection = null;
        try {
            //设置数据库连接池
            comboPooledDataSource.setDriverClass("driverClassName");
            comboPooledDataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
            comboPooledDataSource.setUser("root");
            comboPooledDataSource.setPassword("123456");
            //获取链接
            connection = comboPooledDataSource.getConnection();

        } catch (PropertyVetoException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
  • 方式二:单独创建一个配置文件(.properties)结尾的文件,将数据库连接池的配置信息放入其中,当后期需要修改时,只需要用户在配置文件中修改即可,不需要修改源码。代码实现如下
  • 创建配置文件:放在当前前项目包目录下,代码如下:
driverClassName =com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/test
username = root
password = 123456

initialSize=30
  • 获取连接的代码如下,这里需要注意的是 properties.getProperty("driverClassName")这个代码块中的字符串必须要和上面配置文件中的key的值相同,否则在加载的时候会找不到对象值。
 public Connection getConnection(){
        Connection connection = null;
        try {
            //获取配置文件
            FileInputStream fileInputStream = new FileInputStream("./src/com/wdhcr/jdbc/c3p0/db.properties");
            //创建配置文件对象
            Properties properties = new Properties();
            //通过方法加载配置文件
            properties.load(fileInputStream);
            ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
            //设置连接池属性
            comboPooledDataSource.setDriverClass(properties.getProperty("driverClassName"));
            comboPooledDataSource.setJdbcUrl(properties.getProperty("url"));
            comboPooledDataSource.setUser(properties.getProperty("username"));
            comboPooledDataSource.setPassword(properties.getProperty("password"));
            comboPooledDataSource.setInitialPoolSize(Integer.parseInt(properties.getProperty("initialSize")));
            //获取链接
            connection = comboPooledDataSource.getConnection();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;

    }
  • 方式三:通过创建对象,让对象自己加载默认的xml配置文件
  • 注意:
    xml文件必须放在项目的根目录路径下,否则找不到。
    xml文件名必须是:c3p0-config.xml
    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/test</property>
        <property name = "user">root</property>
        <property name = "password">123456</property>
    </default-config>
</c3p0-config>

xml文件中的字段名也不能修改,格式只能是这样,在这个文件中还可以添加其他一下属性,在这里只是演示基本格式。

  • 获取连接的方法如下:
public Connection getConection(){
		//当创建这个类的对象时,就会自己去项目路径下寻找`c3p0-config.xml`文件,并加载配置信息
        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
        Connection connection = null;
        try {
            connection = comboPooledDataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
  • 方式四:通过自定义xml文件配置数据库连接池
  • 注意:
    xml文件必须放在项目的根目录路径下,否则找不到。
    xml文件名必须是:c3p0-config.xml
    xml文件格式必须如下:
<?xml version="1.0" encoding="UTF-8" ?>
<c3p0-config>
<!--    自定义配置信息-->
    <name-config name = "myConfig"><!--   这里的配置文件名自己随便起--  >
        <property name = "driverClass">com.mysql.jdbc.Driver</property>
        <property name = "jdbcUrl">jdbc:mysql://localhost:3306/test</property>
        <property name = "user">root</property>
        <property name = "password">123456</property>
    </name-config>
</c3p0-config>
  • 获取连接的方法代码如下:
 public Connection getConnection(){
 		//注意在创建对象时的参数及为你自定义配置信息的名字
        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource("myConfig");
        Connection connection = null;
        try {
            connection = comboPooledDataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
  • 测试的方法如下。
  • 方式四
  • 使用DRUID的方式
  • 介绍:DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池,
  • 实现所需要的jar包:
    mysql-connector-java-5.1.38-bin.jar
    druid-1.1.5.jar
  • 实现方式:
  • 方式一:将配置信息写死在源码中,这样不利于后期用户修改,和维护。代码如下:
public Connection getConnection(){
        DruidDataSource druidDataSource = new DruidDataSource();
        //配置数据库连接池的属性信息
        druidDataSource.setDriverClassName("com.mysql.jdbc.Driver");
        druidDataSource.setUrl("jdbc:mysql://localhost:3306/test");
        druidDataSource.setUsername("root");
        druidDataSource.setPassword("123456");
        DruidPooledConnection connection = null;
        try {
        	//获取连接
            connection = druidDataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
  • 方式二:创建配置文件,通过文件加载的方式把配置信息加载到代码中来配置数据库连接池,这样有利于后期修改和维护。
  • 创建配置文件
    在当前项目包的路径下创建例如:db.properties这样的配置文件,代码如下:
driverClassName =com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/test
username = root
password = 123456
  • 获取连接方法的代码如下:
  • 注意:properties.getProperty("driverClassName")这个方法中的字符串一定要和配置文件中的key值保持一致,否则会找不到对应的values值。
public Connection getConnection() {
        DruidDataSource druidDataSource = new DruidDataSource();
        DruidPooledConnection connection = null;
        //读取配置文件
        try {
        	//这里的路径一定要写对以./src开头开始写,否则会找不到该文件
            FileInputStream fileInputStream = new FileInputStream("./src/com/wdhcr/jdbc/driud/db.properties");
            //创建配置文件对象
            Properties properties = new Properties();
            //通过方法加载配置文件
            properties.load(fileInputStream);
            //配置数据库连接池
            druidDataSource.setDriverClassName(properties.getProperty("driverClassName"));
            druidDataSource.setUrl(properties.getProperty("url"));
            druidDataSource.setUsername(properties.getProperty("username"));
            druidDataSource.setPassword(properties.getProperty("password"));
            //获取链接
            connection = druidDataSource.getConnection();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
  • 测试方法如下

  • 如何测试是否获取到连接了呢。

  • 他的测试方式如下:创建一个测试类,在主方法中创建方法类的对象,通过打印对象.方法名的方式检测是否成功获取获取到连接。

public class Test {
    public static void main(String[] args) {
        Conn conn = new Conn();
        System.out.println(conn.getConnection());

    }
}

当执行以上这段代码的结果如下时就说明创建连接成功:

加载驱动成功!!
com.mysql.jdbc.JDBC4Connection@68de145

- 以上文章简单的讲述了jdbc的几种方式来连接mysql数据库。希望多多指教!!!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值