IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> JDBC:获取数据库连接的五种方式以及用类加载器获取properties配置文件信息 -> 正文阅读

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

作者:token comment
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
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 10:14:40  更:2021-09-18 10:16:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:01:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码