【JDBC】获取数据库连接

1.获取数据库连接的要素

要素一:加载并注册驱动
要素二:URL
要素三:用户名和密码

要素一:加载并注册驱动

(1)导入mysql-connector-java的jar包
image

(2)加载驱动
调用 Class 类的静态方法 forName(),向其传递要加载的 JDBC 驱动的类名,com.mysql.jdbc.Driver是驱动类名
image

(3)注册驱动
DriverManager类是管理驱动程序的类,通常Driver类中的静态代码块会调用这个注册方法,因此不需要显式调用
image

Driver类中的静态代码块
image

注:新版的mysql驱动类名为com.mysql.cj.jdbc.Driver

要素二:URL

用来标识一个注册过的驱动程序和定位数据库信息,DriverManager类通过这个URL找到正确的驱动程序
image

常见的URL jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8

要素三:用户名和密码

用于连接数据库
调用 DriverManager 类的 getConnection() 方法获取到数据库的连接

2.连接到数据库

方式一:使用Driver接口实现类中的connect()方法

java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库
厂商提供不同的实现。

显式出现了第三方数据库的API import com.mysql.cj.jdbc.Driver;

    @Test
    public void test1() {
        try {
            //1.java.sql.Driver接口实现类的对象
            Driver driver = null;
            driver = new com.mysql.cj.jdbc.Driver();

            //2.url
            String url = "jdbc:mysql://localhost:3306/test";

            //3.用户名和密码
            Properties info = new Properties();
            info.setProperty("user", "root");
            info.setProperty("password", "123456");

            //4.获取连接
            Connection connect = driver.connect(url, info);
            System.out.println(connect);
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

方式二:通过反射实例化driver

不在代码中体现第三方数据库的API。

    @Test
    public void test2(){
        try {
            //反射方式实例化driver
            Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
            Driver driver = (Driver)clazz.newInstance();

            String url = "jdbc:mysql://localhost:3306/test";

            Properties info = new Properties();
            info.setProperty("user","root");
            info.setProperty("password","123456");

            Connection connect = driver.connect(url, info);
            System.out.println(connect);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

方式三:使用DriverManager注册驱动获取连接

    @Test
    public void test3(){
        try {
            //1.四个要素
            String url = "jdbc:mysql://localhost:3306/test";
            String user = "root";
            String password = "123456";
            String driverName = "com.mysql.cj.jdbc.Driver";

            //2.实例化Driver
            Class clazz = Class.forName(driverName);
            Driver driver = (Driver)clazz.newInstance();

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

            //4.获取连接
            Connection connect = DriverManager.getConnection(url, user, password);
            System.out.println(connect);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

方式四:不用显示注册驱动

    @Test
    public void test4(){
        try {
            //1.四个要素
            String url = "jdbc:mysql://localhost:3306/test";
            String user = "root";
            String password = "123456";
            String driverName = "com.mysql.cj.jdbc.Driver";

            //2.加载和注册驱动(com.mysql.cj.jdbc.Driver类中的静态代码块有实例化注册了)
            Class.forName(driverName);

            //3.获取连接
            Connection connect = DriverManager.getConnection(url, user, password);
            System.out.println(connect);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

方式五:使用配置文件保存要素

配置文件jdbc.properties写在src目录下

user = root
password = 123456
url = jdbc:mysql://localhost:3306/test
driverClass = com.mysql.cj.jdbc.Driver

使用配置文件的方式,数据和代码分离,修改配置文件不需要重新编译

    @Test
    public void test5() throws Exception{
        //1.加载配置文件
        InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
        Properties pros = new Properties();
        pros.load(is);

        //2.读取配置信息
        String user = pros.getProperty("user");
        String password = pros.getProperty("password");
        String url = pros.getProperty("url");
        String driverClass = pros.getProperty("driverClass");

        //3.加载驱动
        Class.forName(driverClass);

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

参考:jdbc如何注册数据库驱动Driver的

posted @ 2022-11-09 18:10  植树chen  阅读(102)  评论(0编辑  收藏  举报