JDBC--获取数据库连接

五迷三道 提交于 2020-03-02 14:49:33

一、JDBC基础

    JDBC(Java Database Connectivity)是一个独立与特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库。

二、JDBC体系结构

JDBC接口(API)包括两个层次:

  • 面向应用的API:Java API,抽象接口,供应用程序开发人员使用(连接数据库,执行SQL语句,获得结果)。
  • 面向数据库的API:Java Driver API,供开发商开发数据库驱动程序用。

JDBC API 是一系列的接口,它使得应用程序能够进行数据库联接,执行SQL语句,并且得到返回结果。

三、JDBC获取数据库连接

1. Driver 接口

  • Java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现
  • 在程序中不需要直接去访问实现了 Driver 接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现

2. 建立连接

    可以调用 DriverManager 类的 getConnection() 方法建立到数据库的连接

3. JDBC URL

    JDBC URL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。

4. 几种常用数据库的JDBC URL

格式:

对于 Oracle 数据库连接,采用如下形式:

  • jdbc:oracle:thin:@localhost:1521:sid

对于 SQLServer 数据库连接,采用如下形式:

  • jdbc:microsoft:sqlserver//localhost:1433; DatabaseName=sid

对于 MYSQL 数据库连接,采用如下形式:  

  • jdbc:mysql://localhost:3306/sid

(1)获取数据库连接--直接调用Driver接口

    /**
     * Driver 是一个接口:数据库厂商必需提供实现的接口
     * @throws SQLException
     */
    @Test
    public void test1() throws SQLException {
        //1.创建一个Driver类的对象
        Driver driver = new com.mysql.jdbc.Driver();

        //2.连接数据库的基本信息:url、user、password
        String url = "jdbc:mysql://localhost:3306/jdbctest";
        Properties info = new Properties();
        info.put("user", "root");
        info.put("password", "12345");

        //3.调用Driver接口的connect获取数据库连接
        Connection connection = driver.connect(url, info);
        System.out.println(connection);
    }

方法改进----通用方法获取数据库连接

把数据库驱动 Driver实现类的全类名、url、user、password放入一个配置文件中,通过修改配置文件的方式来实现数据库连接。

    /**
     * 写一个方法,在不修改源程序的情况下,可以获取任何数据库的连接
     * 解决方案:把数据库驱动 Driver实现类的全类名、url、user、password放入
     * 一个配置文件中,通过修改配置文件的方式来实现数据库连接
     */
    public Connection getConnection() throws Exception {
        String driverClass = null;
        String jdbcUrl = null;
        String user = null;
        String password = null;

        //读取类路径下的 jdbc.properties 文件
        java.io.InputStream in = getClass().getClassLoader().getResourceAsStream("jdbc.properties");
        Properties properties = new Properties();
        properties.load(in);
        driverClass = properties.getProperty("driver");
        user = properties.getProperty("user");
        password = properties.getProperty("password");
        jdbcUrl = properties.getProperty("jdbcUrl");
        
        //通过反射创建Driver对象
        Driver driver = (Driver) Class.forName(driverClass).newInstance();
        Properties info = new Properties();
        info.put("user", user);
        info.put("password", password);
        Connection connection = driver.connect(jdbcUrl,info);

        return connection;
    }

    @Test
    public void test2() throws Exception {
        System.out.println(getConnection());
    }


//配置文件:jdbc.properties
//位于类路径下
driver=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/jdbctest
user=root
password=12345

(2)DriverManager 管理驱动

    /**
     * DriverManager 是驱动的管理类
     * 1.可以通过重载的 getConnection方法获取数据库的连接
     * 2.可以同时管理多个驱动程序:若注册了多个数据库连接,则调用getConnection()
     * 方法时传入的参数不同,即返回不同的数据库连接
     * @throws Exception
     */
    @Test
    public void test3() throws Exception {
        //1.准备连接数据库的4个字符串
        //驱动的全类名
        String driverClass = "com.mysql.jdbc.Driver";
        //JDBC URL
        String jdbcUrl = "jdbc:mysql://localhost:3306/jdbctest";
        //用户名
        String user = "root";
        //密码
        String password = "620422@MS";


        //2.加载数据库驱动程序(对应的Driver实现类中有注册驱动的静态代码块)
        //DriverManager.registerDriver((Driver) Class.forName(driverClass).newInstance());
        Class.forName(driverClass);

        //3.通过DriverManager的getConnection方法获取数据库连接
        Connection connection = DriverManager.getConnection(jdbcUrl, user, password);
        System.out.println(connection);
    }

方法改进----通用方法

    public Connection getConnection2() throws Exception {
        //1.准备连接数据库的4个字符串
        //1.1 创建Properties对象
        Properties properties = new Properties();
        //1.2 获取jdbc.properties对应的输入流
        java.io.InputStream in = this.getClass().getClassLoader().getResourceAsStream("jdbc.properties");
        //1.3 加载文件
        properties.load(in);
        //1.4 给字符串赋值
        String driver = properties.getProperty("driver");
        String jdbcUrl = properties.getProperty("jdbcUrl");
        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        //2.加载数据库驱动程序(对应的Driver实现类中有注册驱动的静态代码块)
        Class.forName(driver);
        //3.通过DriverManager的getConnection方法获取数据库连接
        return DriverManager.getConnection(jdbcUrl, user, password);
    }

    @Test
    public void test4() throws Exception {
        System.out.println(getConnection2());
    }

//配置文件:jdbc.properties
driver=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/jdbctest
user=root
password=12345

 

 

JDBC学习笔记:

1. 获取数据库连接    ----当前----

2. 通过Statement执行更新、查询操作    http://my.oschina.net/daowuming/blog/704384

3. 使用PrepareStatement    http://my.oschina.net/daowuming/blog/704432

4. 使用ResultSetMetaData 对象处理结果集元数据    http://my.oschina.net/daowuming/blog/704487

5. 使用DatabaseMetaData获取数据库信息    http://my.oschina.net/daowuming/blog/704553

6. BLOB    http://my.oschina.net/daowuming/blog/704593

7. 处理事务与隔离级别    http://my.oschina.net/daowuming/blog/704611

8. 批量处理    http://my.oschina.net/daowuming/blog/704641

9. 数据库连接池    http://my.oschina.net/daowuming/blog/704700

10. 调用函数与存储过程    http://my.oschina.net/daowuming/blog/704813

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!