当前位置:   article > 正文

IDEA连接数据库、事务(Java)和数据库连接池(DBCP-C3P0连接池)_idea datebase事务

idea datebase事务
使用IDEA连接数据库
  1. 找到IDEA中连接数据库的地方

右上角

在这里插入图片描述

或者 左下角

在这里插入图片描述

  1. 输入用户名和密码,单机测试连接,然后点击应用,最后点击ok

在这里插入图片描述

  1. 连接成功后点击Schemas

在这里插入图片描述

  1. 双击数据库可以查看数据库表的内容

    修改数据库的表,看下图:

    在这里插入图片描述

    控制台(写SQL语言的地方)选择默认的即可

    在这里插入图片描述

​ 切换数据库

在这里插入图片描述

  1. 测试

跟Navicate一样,选择运行的语句(Navicate会同步出现account表)

在这里插入图片描述

连接数据库遇到的问题

如果再IDEA连接不上数据库,则再这里修改为数据库对应的版本的SQl驱动(失败的最主要的原因就是数据库驱动问题)

在这里插入图片描述

事务(Java实现)

要么都成功,要么失败

package com.sgl.lession02;

import com.sgl.lession02.utils.JdbcUtils;

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

public class TestTransaction {
    public static void main(String[] args) {

        Connection connection = null;
        PreparedStatement preparedStatement =null;
        ResultSet resultSet =null;

        try {
            connection = JdbcUtils.getConnection();
            //关闭数据库的自动提交事务   会自动提交事务
            connection.setAutoCommit(false);

            String sql1 = "update account set money=money-500 where name = 'coco'";
            preparedStatement = connection.prepareStatement(sql1);
            preparedStatement.executeUpdate();

            //int x = 1/0;//报错

            String sql2 = "update account set money=money+500 where name = 'sgl'";
            preparedStatement = connection.prepareStatement(sql2);
            preparedStatement.executeUpdate();

            //业务完毕提交事务
            connection.commit();
            System.out.println("成功");
        } catch (SQLException throwables) {
            //如果失败默认回滚,
            try {
                connection.rollback();  //如果失败就回滚
            } catch (SQLException e) {
                e.printStackTrace();
            }
            throwables.printStackTrace();
        }finally {
            JdbcUtils.release(connection,preparedStatement,null);
        }

    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
数据库连接池(DBCP-C3P0连接池 )

数据库连接------->执行完毕-------->释放

连接到释放 十分浪费系统资源

池化技术:准备一些预先的资源,过来就连接预先准备好的

最小连接数:10

最大连接数:15

等待超时:100ms

编写连接池,实现一个接口 DataSource

开源数据源实现

DBCP

C3P0

Bruid:阿里巴巴

使用这些数据库连接池后,在项目开发中就不需要编写连接数据库的代码了!!!!

DBCP

需要jar包 commons-dbcp-1.4.jar commons-pool-1.6.jar maven仓库直接下载

*代码测试

配置文件 dbcpconfig.properties

# 连接设置
driverClassName = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=false
username = root
password = 123456


# 以下也可以不用配置

# <!-- 初始化连接 -->
initialSize=10

#最大连接数量
maxActive=50

# <!-- 最大空闲空间 -->
maxIdle=20

# <!-- 最小空闲空间 -->
minIdle=5

# <!-- 超时等待以毫秒为单位  -->
maxWait=60000

#JDBC驱动建立连接时附带的连接属性,属性的格式必须为这样:[属性名=property]
#注意:"user""password"两个属性会被明确地传递,因为这里不需要包含他们
connectionProperties=useUnicode=true;characterEncoding=UTF8

#指定由连接池所创建的连接的自动提交 (auto-commit) 状态
defaultAutoCommit=true

#driver default  指定由连接池所创建的连接的只读(read-only)状态
defaultReadOnly=

#driver default  指定由连接池所创建的连接的事务级别(TransactionIsolation)
#可用值为下列之一:NONE,READ_UNCOMMITTED,READ_COMMITTED,REPEATABLE_READ  详情可见javadoc
defaultTransactionIsolation=READ_UNCOMMITTED
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

创建一个类JdbcUtils_DBCP

package com.sgl.lession03.utils;

import com.sgl.lession02.utils.JdbcUtils;
import org.apache.commons.dbcp.BasicDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class JdbcUtils_DBCP {

    private static DataSource dataSource = null;

    static {
        try {
            InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
            Properties properties = new Properties();
            properties.load(in);

            //创建数据源  工厂模式----> 创建
            dataSource = BasicDataSourceFactory.createDataSource(properties);



        } catch (Exception e) {
            e.printStackTrace();
        }


    }

    // 获取连接
    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }

    // 释放连接
    public static void release(Connection connection, Statement statement, ResultSet resultSet){
        if (resultSet!=null){
            try {
                resultSet.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (statement!=null){
            try {
                statement.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (connection!=null){
            try {
                connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63

测试插入

package com.sgl.lession03;

import com.sgl.lession03.utils.JdbcUtils_DBCP;

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

public class TestDBCP {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;

        try {
            connection = JdbcUtils_DBCP.getConnection();
            //区别
            // 使用?  占位符代替参数
            String sql = "INSERT INTO users(`id`,`NAME`,`PASSWORD`,`email`,`birthday`) values(?,?,?,?,?)";

            preparedStatement = connection.prepareStatement(sql);//预编译SQL,先写sql,然后不执行

            //手动给参数赋值
            preparedStatement.setInt(1,4);
            preparedStatement.setString(2,"tqq");
            preparedStatement.setString(3,"987456");
            preparedStatement.setString(4,"2259567490@qq.com");
            //sql.Date     数据库  java.sql.Date()
            //util.Date    Java   new Date().getTime() 获得时间戳
            preparedStatement.setDate(5,new java.sql.Date(new Date().getTime()));

            int i = preparedStatement.executeUpdate();
            if (i>0){
                System.out.println("插入成功");
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            JdbcUtils_DBCP.release(connection,preparedStatement,null);
        }
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

运行结果:

在这里插入图片描述

C3P0

需要jar包 mchange-commons-java-0.2.19.jar c3p0-0.9.5.5.jar maven仓库直接下载

配置文件c3p0-config.xml

<c3p0-config>
    <!--
    c3p0的缺省(默认)配置
    如果在代码中"ComboPooledDataSource ds=new ComboPooledDataSource("MySQL");"这样写就表示使用的是c3p0的缺省(默认)
    -->
    <named-config name="MySQL">
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=UTC</property>
        <property name="user">root</property>
        <property name="password">123456</property>

        <property name="acquireIncrement">5</property>
        <property name="initialPoolSize">10</property>
        <property name="minPoolSize">5</property>
        <property name="maxPoolSize">20</property>
    </named-config>

    <!--
    c3p0的缺省(默认)配置
    如果在代码中"ComboPooledDataSource ds=new ComboPooledDataSource("ORACLE");"这样写就表示使用的是c3p0的缺省(默认)
    -->
    <named-config name="ORACLE">
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=UTC</property>
    <property name="user">root</property>
    <property name="password">123456</property>

    <property name="acquireIncrement">5</property>
    <property name="initialPoolSize">10</property>
    <property name="minPoolSize">5</property>
    <property name="maxPoolSize">20</property>
    </named-config>
</c3p0-config>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

创建一个类JdbcUtils_C3P0

package com.sgl.lession03.utils;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.sql.*;
public class JdbcUtils_C3P0 {

    private static ComboPooledDataSource dataSource = null;

    static {
        try {
            // 代码版配置
//            dataSource = new ComboPooledDataSource();
//            dataSource.setDriverClass();
//            dataSource.setUser();
//            dataSource.setPassword();
//            dataSource.setJdbcUrl();
//            dataSource.setMaxPoolSize();
//            dataSource.setMinPoolSize();

            //创建数据源  工厂模式----> 创建
            dataSource = new ComboPooledDataSource("MySQL");


        } catch (Exception e) {
            e.printStackTrace();
        }


    }

    // 获取连接
    public static Connection getConnection() throws SQLException {
        return dataSource.getConnection();
    }

    // 释放连接
    public static void release(Connection connection, Statement statement, ResultSet resultSet){
        if (resultSet!=null){
            try {
                resultSet.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (statement!=null){
            try {
                statement.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (connection!=null){
            try {
                connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62

测试插入

package com.sgl.lession03;

import com.sgl.lession03.utils.JdbcUtils_C3P0;

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

public class TestC3P0 {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;

        try {
            connection = JdbcUtils_C3P0.getConnection();
            //区别
            // 使用?  占位符代替参数
            String sql = "INSERT INTO users(`id`,`NAME`,`PASSWORD`,`email`,`birthday`) values(?,?,?,?,?)";

            preparedStatement = connection.prepareStatement(sql);//预编译SQL,先写sql,然后不执行

            //手动给参数赋值
            preparedStatement.setInt(1,5);
            preparedStatement.setString(2,"hello");
            preparedStatement.setString(3,"987456");
            preparedStatement.setString(4,"2259567490@qq.com");
            //sql.Date     数据库  java.sql.Date()
            //util.Date    Java   new Date().getTime() 获得时间戳
            preparedStatement.setDate(5,new java.sql.Date(new Date().getTime()));

            int i = preparedStatement.executeUpdate();
            if (i>0){
                System.out.println("插入成功");
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            JdbcUtils_C3P0.release(connection,preparedStatement,null);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

运行结果:

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/547426
推荐阅读
相关标签
  

闽ICP备14008679号