JDBC-获取数据库连接的方式(原生,常用连接池)

目录

五种原生方式获取数据库连接

获取方式一

获取方式二

获取方式三

获取方式四

获取方式五

 使用常用数据库连接池

C3P0 数据库连接池

方式一:硬编码方式获取连接

 方式2:使用配置文件.xml文件获取连接

 DBCP 数据库连接池

方式一:硬编码方式获取连接

 方式二:使用properties配置文件获取连接

 Druid(德鲁伊)数据库连接池(最常用)


五种原生方式获取数据库连接

五种方式逐步迭代。

五种方式都应先导入mysql的jar包 ,在此使用v8.0.30

获取方式一

直接new出第三方库驱动对象。

//1.获取JDBC驱动对象
Driver driver = new com.mysql.cj.jdbc.Driver();

//2.创建参数url和properties
String url = "jdbc:mysql://localhost:3306/test";
Properties info = new Properties();//存储数据库连接的账号密码
info.setProperty("user","***");
info.setProperty("password","***");

//3.创建连接
Connection connect = driver.connect(url, info);

//4.输出连接返回的对象,检查是否连接成功
System.out.println(connect);//连接成功:com.mysql.cj.jdbc.ConnectionImpl@63355449

获取方式二

对方式1的迭代,方式中不存在第三方库(通过反射),提高了可移植性

//1.获取Driver实现类对象 (通过反射)
Class<?> clazz = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver) clazz.newInstance();

//2.配置url和properties
String url = "jdbc:mysql://localhost:3306/test";
Properties properties = new Properties();
properties.setProperty("user","***");
properties.setProperty("password","***");

//3.获取连接
Connection connect = driver.connect(url, properties);

//4.输出连接返回的对象,检查是否连接成功
System.out.println(connect);//com.mysql.cj.jdbc.ConnectionImpl@63355449

获取方式三

使用DriverManager来替换Driver。

//1.获取Driver实现类对象 (通过反射)
Class<?> clazz = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver) clazz.newInstance();

//2.注册驱动
DriverManager.registerDriver(driver);

//3.声明参数
String url = "jdbc:mysql://localhost:3306/test";
String user = "***";
String password = "***";

//4.获取连接
Connection connect = DriverManager.getConnection(url,user,password);

System.out.println(connect); //com.mysql.cj.jdbc.ConnectionImpl@9353778

获取方式四

对方式三的优化:不需要创建Driver对象和注册

//1.声明连接条件的基本信息
String url = "jdbc:mysql://localhost:3306/test";
String user = "***";
String password = "***";
 //2.加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//3.连接
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);//连接成功:com.mysql.cj.jdbc.ConnectionImpl@1fa268de

 此方式的说明: 

优化说明:为什么不用去造Class的对象和不用去注册驱动了?

原因:Driver声明了此静态方法,当我们通过反射将Driver加载到内存中时自动调用静态方法(静态方法随着类的加载而加载),自动创建了Driver对象和注册了驱动。

Driver中声明的静态方法如下(Driver源码):

步骤2中,Class.forName("com.mysql.cj.jdbc.Driver");也可以不写,但是不建议。

可以省略的原因:导入的jar包中,存在文件java.sql.Driver 。

此文件中存放了我们导入jar包时,Driver存放的位置,运行时自动调用加载到内存

获取方式五

最终版:将4个基本信息封装到配置文件,读取配置文件。
通过类加载器加载配置文件:文件默认路径为:当前模块下的src中

 properties文件配置信息

driver=com.mysql.cj.jdbc.Driver
user=***
password=***
url=jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true

----------------------- 

//1.获取类加载器,获取文件流
ClassLoader classLoader = CreateJDBCConnections.class.getClassLoader();
InputStream is = classLoader.getResourceAsStream("connectionData.properties");
//2.Properties加载流
Properties properties = new Properties();
properties.load(is);
//3.获取信息
String url = properties.getProperty("url");
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String driver = properties.getProperty("driver");
//4.加载驱动
Class.forName(driver);
//5.连接数据库
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);//连接成功:com.mysql.cj.jdbc.ConnectionImpl@6b927fb

 配置文件默认路径说明:

读取配置文件的两种方式:

1.IO流,文件默认相对路径位置:当前模块下.

2.通过类加载器,文件默认相对路径位置:当前模块下的src中.

 方式五的优点:

1.实现了数据与代码的分离,实现了解耦。

2.如果要修改数据,避免了重新打包。

 使用常用数据库连接池

使用数据库连接池,可以配置许多关于连接的信息,如最大连接数,创建时初始化连接数量等等,每个数据库连接池的方法名各有些区别,如有需要配置,可以到各官方查看。在此使用最基本的连接信息获取数据库连接,其他配置默认。

C3P0 数据库连接池

导入jar包 在此使用v0.9.1.2

方式一:硬编码方式获取连接

//1.创建ComboPooledDataSource对象
ComboPooledDataSource cpds = new ComboPooledDataSource();
//2.配置连接池连接信息com.mysql.cj.jdbc.Driver
cpds.setDriverClass("com.mysql.cj.jdbc.Driver");
cpds.setJdbcUrl("jdbc:mysql://localhost:3306/test");
cpds.setUser("***");
cpds.setPassword("***");
//3.获取连接
Connection connection = cpds.getConnection();
System.out.println(connection);

配置连接信息时,可以配置连接池的其他参数,如最大连接数等等。

连接成功信息:

 方式2:使用配置文件.xml文件获取连接

配置xml文件-设置连接信息

 获取连接

ComboPooledDataSource cpds = new ComboPooledDataSource("c3p0data");
Connection connection = cpds.getConnection();
System.out.println(connection);

连接成功信息:

 DBCP 数据库连接池

导入jar包,在此使用v2.7.0

方式一:硬编码方式获取连接

//1.创建BasicDataSource对象
BasicDataSource bds = new BasicDataSource();
//2.配置连接信息
bds.setDriverClassName("com.mysql.cj.jdbc.Driver");
bds.setUrl("jdbc:mysql://localhost:3306/test");
bds.setUsername("root");
bds.setPassword("root");
//3.获取连接
Connection connection = bds.getConnection();
System.out.println(connection);

连接成功信息:

 方式二:使用properties配置文件获取连接

配置文件信息 

连接操作:

//创建properties对象,用以加载流
Properties properties = new Properties();
//调用系统类加载器,获取输入流
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("dbcp-config.properties");
//加载流,获取配置信息
properties.load(is);
BasicDataSource dataSource = BasicDataSourceFactory.createDataSource(properties);
//获取连接
Connection connection = dataSource.getConnection();
System.out.println(connection);

 连接成功信息:

 Druid(德鲁伊)数据库连接池(最常用)

Druid是阿里开源平台上一个数据库连接池的实现,结合了许多数据库连接池的优点,包括如上介绍两种,可以说是如今最受欢迎的数据库连接池之一。 

导入jar包,在此使用1.2.11

 properties.文件配置信息

 在此方式:封装为了方法,处理了异常(try-catch)

 private static DataSource source;
    static {
        try {
            Properties properties = new Properties();
            InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("propertiesDruid.properties");

            properties.load(is);

            source = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() {
        Connection connection = null;
        try {
            connection = source.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }

调用封装好的方法,获取连接:

public void test1() {
    Connection connection = getConnection();
    System.out.println(connection);
 }

成功连接信息:

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mao.O

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值