数据库 一

image 一:认识JDBC(Java Database Connectivity)

1.JDBC(Java与数据库连接)是java定义的一套对操作数据库的规范,目的简化和统一操作数据库,JDBC由一组用Java语言编写的类和接口组成。
2.JDBC是java中的接口,想用它来连接第三方数据库,必须有实现JDBC的实现类,而这个实现类是需要由第三方数据库提供商来实现,即:每当我们想要与第三方数据库来连接的时候,就需要导入一个第三方数据库提供商提供的实现JDBC接口的一个包。
3.组成JDBC的两个包分别是:java.sql,javax.sql。这两个包在javaSE中包含。
4.JDBC主要的接口和类:
Driver接口:连接数据库的驱动API 反射 Class.forName(“完整的类名”); 包名.类名
DriverManager类: 驱动管理类,负责驱动的注册(加载),获取数据库连接
Statement接口:负责SQL语句的执行
PreparedStatement接口:负责SQL语句的预处理
ResultSet接口:处理查询数据库的结果集

image 二:应用程序与数据库连接的基本构图

应用程序与数据库连接,想要调用JDBC接口,首先要加载第三方数据库提供的JDBC驱动,所以先将JDBC驱动加载到系统内存中,再供系统使用。

这里写图片描述


image 三:应用程序与数据库连接的过程

一.加载JDBC驱动到内存
1. 所谓驱动:就是实现了java.sql.Driver接口的类。

由于驱动的本质是一个class,所以加载驱动的原理和加载类文件是一个原理,通过反射机制使用Class.forName(“drivernam”)

2.以下是将常用的数据库驱动加载到内存中的代码:
//加载Oracle数据库驱动
Class.forName("oracle.jdbc.driver.OracleDriver");

//加载SQL Server数据库驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

//加载MySQL 数据库驱动
Class.forName("com.mysql.jdbc.Driver");
注意:Class.forName()将对应的驱动类(即driver类)加载到内存中,然后执行内存中的static静态代码段,代码段中,会创建一个驱动Driver的新对象,放入DriverManager中,调用DriverManager的registerDriver方法进行注册,供DriverManager使用。下面是
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    // Register ourselves with the DriverManager

    static {
        try {
            java.sql.DriverManager.registerDriver(new Driver());
        } catch (SQLException E) {
            throw new RuntimeException("Can't register driver!");
        }
    }

    /**
     * Construct a new driver and register it with DriverManager
     * 
     * @throws SQLException
     *             if a database error occurs.
     */
    public Driver() throws SQLException {
        // Required for Class.forName().newInstance()
    }
}
二.上面实现了JDBC 的Driver接口,注册了Driver后,来看看Driver的具体功能

这里写图片描述

  1. acceptsURL(String url) 方法:用来测试对指定的url,该驱动能否打开这个url连接,driver对自己能够连接的
    url会制定自己的协议,只有符合自己的协议形式的url才认为自己能够打开这个url,如果能够打开,返回true,反之,返回false;(注意:这里acceptsURL(url)只会校验url是否符合协议,不会尝试连接判断url是否有效)

  2. connect(String url,Properties info)方法,创建Connection对象,用来和数据库的数据操作和交互,而Connection则是真正数据库操作的开始(在此方法中,没有规定是否要进行acceptsURL()进行校验)。

    url: JDBC连接数据库(MySQL)URL jdbc:mysql://localhost:3306/javaee1707?useSSL=true。

    propertie:连接数据库的属性,主要包含的是数据库的用户名和密码

注:URL:统一资源定位符(下面是mysql的协议)
jdbc:mysql://localhost:3306/javaee1707

协议:子协议://ip:端口号/数据库?参数

协议:JDBC总协议

子协议:目前使用的是连接MySQL数据库的协议

ip:是数据库服务器的IP地址,localhost表示本机的IP地址

端口号:3306 MySQL数据库的默认端口号,可以修改

数据库:目前连接操作的数据库时哪一个

参数:useUnicode=true&characterEncoding=UTF-8

2.手动加载Driver驱动

public class Demo1 {
    @Test
    public void connection() throws InstantiationException, IllegalAccessException {
        try {
            /**
             *  1.使用Class.forName( )静态方法的目的是为了动态加载类。
             *  在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象
             *   newIstance()方法直接调用编译器提供该类的无参构造方法去创建对象
             */
            Driver driver = (Driver) Class.forName("com.mysql.jdbc.Driver").newInstance();

            //2.创建真实的数据库连接   useSSL=true:代表安全链接
            String url = "jdbc:mysql://localhost:3306/java?useSSL=true";
            Properties props = new Properties();
            props.put("user", "root");
            props.put("password", "lj1491225094");

            //3.使用connection连接到数据库
            Connection connection = driver.connect(url, props);
            System.out.println(connection);

            //4. 关闭数据库连接,释放资源
            connection.close();

        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
} 

注:上述的手动加载Driver并且获取连接的过程稍显笨拙:如果现在我们加载进来了多个驱动Driver,那么手动创建Driver实例,并根据URL进行创建连接就会显得代码杂乱无章,并且还容易出错,并且不方便管理。JDBC中提供了一个DriverManager角色,用来管理这些驱动Driver。

image 三:DriverManager方法和作用

一:作用
事实上,一般我们操作Driver,获取Connection对象都是交给DriverManager统一管理的。DriverManger可以注册和删除加载的驱动程序,可以根据给定的url获取符合url协议的驱动Driver或者是建立Conenction连接,进行数据库交互。
二:DriverManager的关键方法摘要

这里写图片描述

DriverManager 内部持有这些注册进来的驱动 Driver,由于这些驱动都是 java.sql.Driver 类型,那么怎样才能获得指定厂商的驱动Driver呢?答案就在于:
java.sql.Driver接口规定了厂商实现该接口,并且定义自己的URL协议。厂商们实现的Driver接口通过acceptsURL(String url)来判断此url是否符合自己的协议,如果符合自己的协议,则可以使用本驱动进行数据库连接操作,查询驱动程序是否认为它可以打开到给定 URL 的连接。
三:使用DriverManager获取指定Driver
    Driver mysqlDriver =DriverManager.getDriver("jdbc:mysql://localhost:3306/java?useSSL=true");

还未总结完,日后再补。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值