JDBC:获取数据库连接的五种方式以及用类加载器获取properties配置文件信息

package JDBCTest;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import java.util.stream.Stream;

import org.junit.Test;

/**
 * @className: Test01
 * @description: JDBC获取数据库连接
 * @author: CCQ
 * @date: 2021/9/17
 **/

/*
    第一步:加载相关厂商的驱动
    第二部:确定url以及数据库用户和密码
    第三步:建立连接

 */

public class Test01 {

    //方式一:
    @Test
    public void test() throws SQLException {
        //加载驱动,获取Driver接口的实现类对象
        Driver driver =new com.mysql.jdbc.Driver();

        //统一资源定位符,确定连接到哪里
        //jdbc:mysql:协议
        //localhost:IP地址
        //3306:默认的MySQL端口号
        //cc:MySQL其中的一个数据库
        //useUnicode=true使用Unicode编码,characterEncoding=utf-8使用这个编码集,useSSL=true安全(这些有时候是可选的)
        String url ="jdbc:mysql://localhost:3306/cc?jdbcstudy?useUnicode=true&characterEncoding=utf-8&useSSL=true";

        //这个集合是hashtable的子类,里面存储的是键值对
        //在这里保存数据库的用户和密码
        Properties info =new Properties();
        info.setProperty("user","root");
        info.setProperty("password","root");

        Connection connect = driver.connect(url, info);
        System.out.println(connect);
    }

    //方式二(通过反射获取Driver接口实现类):对方式一的迭代(在以下的程序中不出现第三方的api,使得程序有更好的可移植性)
    @Test
    public void test2() throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, SQLException {
        //反射获得Driver接口的实现类(即Driver类)的Class对象,然后通过Class对象获得构造器创建Driver对象
        Class clazz = Class.forName("com.mysql.jdbc.Driver");
        Driver driver =(Driver)clazz.getConstructor().newInstance();

        //指定数据库的url位置
        String url ="jdbc:mysql://localhost:3306/cc";

        //利用Properties集合保存数据库用户以及密码
        Properties info =new Properties();
        info.setProperty("user","root");
        info.setProperty("password","root");

        //通过Driver接口的实现类对象获取连接
        Connection connect = driver.connect(url, info);
        System.out.println(connect);
    }

    //方式三:使用DriverManager替换Driver
    @Test
    public void test3() throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, SQLException {

        String url ="jdbc:mysql://192.168.31.101:3306";
        String user ="root";
        String password ="root";

        //获取Driver接口的实现类对象
        Class clazz = Class.forName("com.mysql.jdbc.Driver");
        Driver driver =(Driver)clazz.getConstructor().newInstance();

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

        //获取连接
        Connection connection = DriverManager.getConnection(url, user, password);
        System.out.println(connection);
    }

    //方式四:简化方式三
    @Test
    public void test4() throws ClassNotFoundException, SQLException {
        String url ="jdbc:mysql://localhost:3306";
        String user ="root";
        String password ="root";

        //之所以能一步到位省略注册驱动是因为在加载类到内存的时候Driver类已经有静态代码块帮我们做了
        Class.forName("com.mysql.jdbc.Driver");

        Connection connection = DriverManager.getConnection(url, user, password);
        System.out.println(connection);
    }

    //方式五:最终版本,非常好用,可以实现解耦
    @Test
    public void test5() throws IOException, SQLException {
        //通过反射获得类的Class对象
        Class test01Class = Test01.class;
        //通过上面的Class对象获得加载该类的加载器
        ClassLoader classLoader = test01Class.getClassLoader();
        //通过已经获得的类加载加载properties配置文件,以流的方式存在
        InputStream resourceAsStream = classLoader.getResourceAsStream("jdbc.properties");
        //创建集合
        Properties properties = new Properties();
        //把流中的数据装入集合
        properties.load(resourceAsStream);

        //建立数据库连接
        Connection connection = DriverManager.getConnection(properties.getProperty("url"), properties.getProperty("user"), properties.getProperty("password"));
        System.out.println(connection);
    }




}


package JDBCTest;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;
import java.util.stream.Stream;

/**
 * @className: LoaderTest
 * @description: 利用类的加载器获取properties配置文件信息
 * @author: CCQ
 * @date: 2021/9/17
 **/
public class LoaderTest {
    public static void main(String[] args) throws IOException {
        //获得类的反射对象
        Class loaderTestClass = LoaderTest.class;
        //通过反射对象得到类的加载器
        ClassLoader classLoader = loaderTestClass.getClassLoader();
        //打印加载器
        System.out.println(classLoader);
        //加载器通过getResourceAsStream方法可以获取路径内文件的信息,以流的形式存在
        InputStream resourceAsStream = classLoader.getResourceAsStream("jdbc.properties");
        //创建Properties集合
        Properties properties = new Properties();
        //集合加载流中的数据
        properties.load(resourceAsStream);
        //打印加载完信息的集合
        System.out.println(properties.getProperty("user")+"  "+properties.getProperty("password"));

    }
}


user=root
password=root
url=jdbc:mysql://localhost:3306/cc
ClassDriver=com.mysql.jdbc.Driver
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值