一:认识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接口:处理查询数据库的结果集
二:应用程序与数据库连接的基本构图
应用程序与数据库连接,想要调用JDBC接口,首先要加载第三方数据库提供的JDBC驱动,所以先将JDBC驱动加载到系统内存中,再供系统使用。
三:应用程序与数据库连接的过程
一.加载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的具体功能
acceptsURL(String url) 方法:用来测试对指定的url,该驱动能否打开这个url连接,driver对自己能够连接的
url会制定自己的协议,只有符合自己的协议形式的url才认为自己能够打开这个url,如果能够打开,返回true,反之,返回false;(注意:这里acceptsURL(url)只会校验url是否符合协议,不会尝试连接判断url是否有效)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。
三: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");
还未总结完,日后再补。