目录

1、JDBC概述

        1.1 JDBC介绍

        1.2 JDBC体系结构

        1.3 JDBC程序编写步骤

2、连接要素

        2.1 Driver 接口实现类

        2.2 URL

        2.3 用户名和密码

3、连接数据库方式

        3.1 连接方式一

        3.2 连接方式二

        3.3 连接方式三

        3.4 连接方式四

        3.5 连接方式五(推荐使用)


1、JDBC概述

        1.1 JDBC介绍

                JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,(java.sql,javax.sql)使用这些类库可以以一种标准的方法、方便地访问数据库资源。

                JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题。

                JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。

如果没有JDBC,那么Java程序访问数据库时是这样的:

使用JDBC连接MySQL数据库-编程知识网

 有了JDBC,Java程序访问数据库时是这样的:

使用JDBC连接MySQL数据库-编程知识网

        1.2 JDBC体系结构

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

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

                        面向数据的API:Java Driver API,供开发商开发数据库驱动程序用

                        JDBC是sun公司提供一套用于数据库操作的接口,java程序员只需要面向这套接口编程即可。不同的数据库厂商,需要针对这套接口,提供不同的实现。不同的实现的集合,即为不同数据库的驱动——–面向接口编程

        1.3 JDBC程序编写步骤

使用JDBC连接MySQL数据库-编程知识网

        补充:ODBC(Open Database Connectivity,开放式数据库连接),是微软在Windows平台下推出的。使用者在程序中只需要调用ODBC API,由 ODBC 驱动程序将调用转换成为对特定的数据库的调用请求。

2、连接要素

        2.1 Driver 接口实现类

                2.1.1 Driver 接口介绍

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

                在程序中不需要直接去访问实现了 Driver 接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现。
                MySQL的驱动: com.mysql.jdbc.Driver
                附上下载地址:密码:1234

使用JDBC连接MySQL数据库-编程知识网

idea导入MySQL驱动步骤:

使用JDBC连接MySQL数据库-编程知识网

使用JDBC连接MySQL数据库-编程知识网

                2.1.2 加载与注册JDBC驱动

                        加载驱动:加载 JDBC 驱动需调用 Class 类的静态方法 forName(),向其传递要加载的 JDBC 驱动的类名

                        Class.forName(“com.mysql.jdbc.Driver”);

                        注册驱动:DriverManager 类是驱动程序管理器类,负责管理驱动程序

                        使用DriverManager.registerDriver(com.mysql.jdbc.Driver)来注册驱动

                        通常不用显式调用 DriverManager 类的 registerDriver() 方法来注册驱动程序类的实 例,因为 Driver 接口的驱动程序类都包含了静态代码块,在这个静态代码块中,会调用 DriverManager.registerDriver() 方法来注册自身的一个实例。

        2.2 URL

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

                JDBC URL的标准由三部分组成,各部分间用冒号分隔。 
                        jdbc:子协议:子名称
                        协议:JDBC URL中的协议总是jdbc 
                        子协议:子协议用于标识一个数据库驱动程序
                        子名称:一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息。包含主机名(对应服务端的ip地址),端口号数据库名

        比如:

使用JDBC连接MySQL数据库-编程知识网

                MySQL的连接URL编写方式:

                        jdbc:mysql://主机名称:mysql服务端口号/数据库名称?参数=值&参数=值
                        jdbc:mysql://localhost:3306/test
                        jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8(如果JDBC程序与服务器端的字符集不一致,会导致乱码,那么可以通过参数指定服务器端的字符集)
                        jdbc:mysql://localhost:3306/test?user=root&password=123456

        2.3 用户名和密码

                user,password可以用“属性名=属性值”方式告诉数据库
                可以调用 DriverManager 类的 getConnection() 方法建立到数据库的连接

3、连接数据库方式

        3.1 连接方式一

    @Testpublic void testConnection1() {try {//1.提供java.sql.Driver接口实现类的对象Driver driver = null;driver = new com.mysql.jdbc.Driver();//2.提供url,指明具体操作的数据String url = "jdbc:mysql://localhost:3306/test";//3.提供Properties的对象,指明用户名和密码Properties info = new Properties();info.setProperty("user", "root");info.setProperty("password", "123456");//4.调用driver的connect(),获取连接Connection conn = driver.connect(url, info);System.out.println(conn);} catch (SQLException e) {e.printStackTrace();}}

说明:上述代码中显式出现了第三方数据库的API

        3.2 连接方式二

@Testpublic void testConnection2() {try {//1.实例化DriverString className = "com.mysql.jdbc.Driver";Class clazz = Class.forName(className);Driver driver = (Driver) clazz.newInstance();//2.提供url,指明具体操作的数据String url = "jdbc:mysql://localhost:3306/test";//3.提供Properties的对象,指明用户名和密码Properties info = new Properties();info.setProperty("user", "root");info.setProperty("password", "123456");//4.调用driver的connect(),获取连接Connection conn = driver.connect(url, info);System.out.println(conn);} catch (Exception e) {e.printStackTrace();}}

说明:相较于方式一,这里使用反射实例化Driver,不在代码中体现第三方数据库的API。体现了面向接口编程思想。

        3.3 连接方式三

@Testpublic void testConnection3() {try {//1.数据库连接的4个基本要素:String url = "jdbc:mysql://localhost:3306/test";String user = "root";String password = "123456";String driverName = "com.mysql.jdbc.Driver";//2.实例化DriverClass clazz = Class.forName(driverName);Driver driver = (Driver) clazz.newInstance();//3.注册驱动DriverManager.registerDriver(driver);//4.获取连接Connection conn = DriverManager.getConnection(url, user, password);System.out.println(conn);} catch (Exception e) {e.printStackTrace();}}

说明:使用DriverManager实现数据库的连接。体会获取连接必要的4个基本要素。

        3.4 连接方式四

@Testpublic void testConnection4() {try {//1.数据库连接的4个基本要素:String url = "jdbc:mysql://localhost:3306/test";String user = "root";String password = "123456";String driverName = "com.mysql.jdbc.Driver";//2.加载驱动 (①实例化Driver ②注册驱动)Class.forName(driverName);//Driver driver = (Driver) clazz.newInstance();//3.注册驱动//DriverManager.registerDriver(driver);/*可以注释掉上述代码的原因,是因为在mysql的Driver类中声明有:static {try {DriverManager.registerDriver(new Driver());} catch (SQLException var1) {throw new RuntimeException("Can't register driver!");}}*///3.获取连接Connection conn = DriverManager.getConnection(url, user, password);System.out.println(conn);} catch (Exception e) {e.printStackTrace();}}

说明:不必显式的注册驱动了。因为在DriverManager的源码中已经存在静态代码块,实现了驱动的注册。

        3.5 连接方式五(推荐使用)

                在工程的src目录下新建配置文件:jdbc.properties

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

                说明:使用配置文件的方式保存配置信息,在代码中加载配置文件

                使用配置文件的好处:

                        ①实现了代码和数据的分离,如果需要修改配置信息,直接在配置文件中修改,不需要深入代码
                        ②如果修改了配置信息,省去重新编译的过程。

@Testpublic  void testConnection5() 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 conn = DriverManager.getConnection(url,user,password);System.out.println(conn);}

输出以下结果表示连接成功

使用JDBC连接MySQL数据库-编程知识网