前言
前述已经对JDBC的概念,原理和使用,简单的做了介绍,以及完成了导包等相关准备工作,之后,就可以切入正题了,根据JDBC的使用步骤,下面演示如何创建连接,那么,在创建连接之前,还需要注册驱动。
注册驱动:
注册驱动的目的就是告诉DriverManager,我要用哪套驱动,实际上就是一句话:
//装载驱动类,驱动类通过static块实现在DriverMananger中的"自动注册"
Class.forName(“oracle.jdbc.driver.OracleDriver”);
调用Class类的forName方法,这个方法需要传入一个参数,是我所要用的那个驱动类的类名。关于这个类名,我们可以去这个,提供驱动的那个公司的官网上,就可以看到。那么Oracle的驱动类的类名叫OracleDriver,当然,前面还有包名:“oracle.jdbc.driver.OracleDriver”,实际上,这就是导入的Oracle驱动包中的一个类。 打开Maven Dedendencies可以找到这个类:
Maven Dependencies
---- ojdbc14-10.2.0.4.0.jar
-------- oracle.jdbc.driver.OracleDriver.class
另外,我们也可以直接Ctrl+Shift+T进行模糊查询,Ora*Driver,可以搜到两个,一个包叫oracle.jdbc,一个包叫oracle.jdbc.driver,这两个都可以,我们使用第二个包的类:oracle.jdbc.driver.OracleDriver,连带着包名加类名一起复制加双引号,粘贴到Class.forName()方法里,当然,这个方法声明抛了异常,我们对异常进行try-catch处理下这个异常,因为是测试方法,catch到异常,看一下什么问题,就不去对异常进行处理了。代码如下:
//代码实现之注册驱动
try {
Class.forName(“oracle.jdbc.driver.OracleDriver”);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
创建连接:
注册完驱动以后,紧接着需要创建连接,具体的代码实现也是一句话:
//Connection只是接口!真正的实现是由数据库厂商提供的驱动包完成的。根据url连接参数找到与之匹配的Driver对象,调用其方法获取连接。
conn = DriverManager.getConnection(“jdbc:oracle:thin:@localhost:1521:orcl”, “SYSxxx”, “Oraclexxx”);
创建连接不用我们自己去new,实例化一个连接,我们调用DriverManager,这个类在jdk里的java.sql包下,它会帮我们实例化一些内容。DriverManager给我们提供了一个静态方法getConnection(),直接能够给我们创建一个连接Connection的实例对象。而Connection本身是一个接口,也是在jdk的java.sql包下,所以,表面看DriverManager给我们返回的是接口类型,但他实际返回的是实现类,只不过我们用这个实现类实现的接口去接收了这个实现类,进行向上转型的多态处理。然后呢,它需要传三个参数:
- 第一个参数:是这个数据库的访问路径,这个路径包括,数据库的IP地址,端口 和 数据库的SID,把这些东西组织在一起,有固定的格式。
>“jdbc:oracle:thin:IP:PORT:SID”//其中"jdbc:oracle:thin"固定写法 - 第二个参数:是访问数据库的账户,用户名。
- 第三个参数:是访问数据库的密码,口令。
另外,这个getConnection()方法也声明抛了异常,我们也catch下这个异常,因为是测试代码,依然不做处理。代码如下:
public void test1() {
System.out.println(1);
try {
//注册驱动
Class.forName(“oracle.jdbc.driver.OracleDriver”);
//创建连接
Connection conn = DriverManager.getConnection(“jdbc:oracle:thin:@192.168.43.xxx:orcl”, “SYSxxx”, “Oraclexxx”);
System.out.println(conn);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
关闭连接:
- 注册驱动,创建连接之后,这就已经可以开始工作了,但是还有一点不太合理的地方,创建完连接以后,最后一定要关闭,无论如何都要关闭,如果不关闭连接的话,这个连接一直被长期占据着,这个时间一长,数据库就崩溃了。因为我们应该是,无论如何都要关闭,应该在finally当中关闭,finally当中写。
- 关闭连接是调用连接Connection的close();方法。但是Connection声明在了try-catch代码块中,是局部变量,没有办法调用它的close()方法,所以,需要把Connection在try-catch外面声明为成员变量。
Connection conn = null;//声明在try-catch块外部
conn.close();//声明异常 - 最后我们调用Connection关闭连接的方法conn.close();时,这句话也声明报了异常,也需要进行try-catch,具体实现代码如下:
package test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.junit.Test;
public class Test {
@Test
public void test1() {
Connection conn = null;
try {
//注册驱动
Class.forName(“oracle.jdbc.driver.OracleDriver”);
//创建连接
conn = DriverManager.getConnection(“jdbc:oracle:thin:@192.168.43.xxx:orcl”, “SYSxxx”, “Oraclexxx”);
System.out.println(conn);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}