JDBC核心技术10.21

it2024-12-09  16

第一章 JDBC概述

1.1 数据持久化

持久化:把数据保存到可掉电式存储设备中,以供使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以固化,而持久化的实现过程大多通过各种关系数据库来完成。

持久化的主要应用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。

1.2 Java中的数据存储技术

在Java中,数据库存取技术可分为如下几类: ①JDBC直接访问数据库 ②JDO(Java Data Objec)技术 ③第三方O/R工具,如Hibernate、Mybatis等 JDBC是java访问数据库的基石,JDO、Hibernate、Mybatis等只是更好的封装了JDBC

1.3 JDBC介绍

JDBC是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,(java.sql、javax.sql)使用这些类库可以以一种标准的方法、方便的访问数据库资源。JDBC为访问不同的数据库提供了一种统一途径,为开发者屏蔽了一些细节问题。JDBC的目标是使程序猿使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。

1.4 JDBC体系结构

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

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

1.5 JDBC程序编写

第2章 获取数据库连接

2.1 要素一:Driver接口实现类

2.1.1 Driver接口介绍

java.sql.Driver接口是所有JDBC驱动程序需要实现的接口。在程序中不需要直接去访问实现了Driver接口的类,而是由驱动程序管理器类去调用这些Driver的实现。Oracle的驱动:oracle.jdbc.driver.OracleDrivermySql的驱动:com.mysql.jdbc.Driver

2.1.2 加载与注册JDBC驱动

加载驱动:Class.forName(“com.mysql.jdbc.Driver”);注册驱动:DriverManager.registerDriver(“com.mysql.jdbc.Driver”)

2.2 要素二:URL

JDBC URL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个URL选择正确的驱动程序,从而建立到数据库的连接。JDBC URL 的标准由三部分组成,各部分间用冒号分隔。 - jdbc:子协议:子名称 - 协议:JDBC URL中的协议总是JDBC - 子协议:子协议用于标识一个数据库驱动程序 - 子名称:一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息。包含主机名、端口号、数据库名。几种常用数据库的JDBC URL - MySQL的连接URL编写方式

2.3 要素三:用户名和密码

也就是配置数据库时,我们自己设置的用户名与密码

2.4 数据库连接方式举例(5种哦)

//方式一: @Test public void testConnection1() throws SQLException { //获取Driver的实现类对象 Driver driver = new com.mysql.jdbc.Driver(); String url = "jdbc:mysql://localhost:3307/test"; //将用户名和密码封装到在Properties中 Properties info = new Properties(); info.setProperty("user","root"); info.setProperty("password","root"); Connection conn = driver.connect(url,info); System.out.println(conn); } //使用反射实现 //对方式一的迭代:在如下的程序中不出现第三方的api,使得程序具有很好的移植性 @Test public void testConnection2() throws Exception{ //1.获取Driver实现类对象,使用反射 Class clazz = Class.forName("com.mysql.jdbc.Driver"); Driver driver = (Driver)clazz.newInstance(); //2.提供要连接的数据库 String url = "jdbc:mysql://localhost:3307/test"; //3.提供连接需要的用户名和密码 Properties info = new Properties(); info.setProperty("user","root"); info.setProperty("password","root"); //4.获取连接 Connection conn = driver.connect(url,info); System.out.println(conn); } //方式三:使用DriverManager替换Driver @Test public void testConnection3() throws Exception{ //1.获取Driver实现类的对象 Class clazz = Class.forName("com.mysql.jdbc.Driver"); Driver driver = (Driver)clazz.newInstance(); //2.提供另外三个连接的基本信息 String url = "jdbc:mysql://localhost:3307/test"; String user = "root"; String password = "root"; //注册驱动 DriverManager.registerDriver(driver); //获取连接 Connection conn = DriverManager.getConnection(url, user, password); System.out.println(conn); } //方式四:可以只是加载驱动,不用显示注册过的驱动了 @Test public void testConnection4() throws Exception{ //1.提供三个连接的基本信息 String url = "jdbc:mysql://localhost:3307/test"; String user = "root"; String password = "root"; //2.获取Driver实现类的对象 Class.forName("com.mysql.jdbc.Driver"); //相较于方式三,可以省略如下操作: // Driver driver = (Driver)clazz.newInstance(); // //注册驱动 // 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); } //方式五: //将数据库连接需要的4个基本信息声明在配置文件中,通过读取配置文件的方式获取连接 /* 此种方式的好处: 1.实现了数据与代码的分离,实现了解耦 2.如果需要修改配置文件信息,可以避免程序重新打包 */ @Test public void testConnection5() throws Exception{ //1.读取配置文件中的4个基本信息 InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties"); Properties pros = new Properties(); pros.load(is); String user = pros.getProperty("user"); String password = pros.getProperty("password"); String url = pros.getProperty("url"); String driverClass = pros.getProperty("driverClass"); //2.加载驱动 Class.forName(driverClass); //3.获取连接 Connection conn = DriverManager.getConnection(url, user, password); System.out.println(conn); }
最新回复(0)