JDBC连接步骤以及JDBC注册数据库驱动的意思
参考:
笔记:
JDBC的连接步骤
执行一次JDBC连接,分六个步骤进行:
1. 导入包
在程序中包含数据库编程所需的JDBC类。大多数情况下,使用 import java.sql.* 就足够了。
2. 注册JDBC驱动程序
需要初始化驱动程序,这样就可以打开与数据库的通信。
JDBC是一套规范(通俗的说就是一套接口),它本身是没有针对具体数据库操作提供实现的, 所以谁要让自家的数据库适配JDBC,就实现这套接口即可。一般叫实现JDBC规范的jar包为JDBC驱动(我们通过JDBC接口执行数据库操作命令,具体让数据库操作的是驱动程序)。
// JDBC驱动包名和数据库的URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost/test"; // 数据库名和密码自己修改 static final String USER = "username"; static final String PASS = "password";
等价于://STEP 2: 注册JDBC驱动程序 try { Class.forName(JDBC_DRIVER); //它会导致类中的静态变量会被初始化,静态代码块也会被执行。 } catch (ClassNotFoundException e) { e.printStackTrace(); }
主要目的都是为了执行com.mysql.jdbc.Driver对象中的static方法来注册Driver进入DriverManager。
通过class.forName()加载注册驱动 括号里面是com.数据库名.jdbc.Driver ,Driver 类的底层会有静态代码块加载注册驱动,使java连接到sql语句,同时实现连接数据库的方法都被各大数据库厂商封印在jar包中,直接使用即可,我们要做的就是第一步就是注册驱动身份验证,才能进入数据库。static { try { java.sql.DriverManager.registerDriver(new Driver()); } catch (SQLException E) { throw new RuntimeException("Can't register driver!"); } }
Driver driver=new com.mysql.jdbc.Driver(); Connection conn=driver.connect(url, info);
最后,JDBC4.0提供了驱动自动加载,DriverManager中的getConnection和getDrivers方法作了改进,以支持Java SE 服务提供商机制(SPM)。可以在驱动jar包中找到META-INF/services/java.sql.Driver文件,我的MySQL驱动版本是5.1.38,这个文件打开后是这样的:
所以写点小程序的话可以不用写Class.forName("com.mysql.jdbc.Driver")这一行了~从 JDBC 4.0 ( JDK 1.6 ) 开始,应用程序不再需要显式地使用Class.forName("驱动名称")加载驱动程序了,DriverManager 开始能够自动地承担这项任务(在DriverManager 载入时会自动加载驱动)。
3. 打开一个连接
使用DriverManager.getConnection()方法来创建一个Connection对象,它代表一个数据库的物理连接。
4. 执行一个查询
需要使用一个类型为Statement或PreparedStatement的对象(两者区别看后文),并提交一个SQL语句到数据库执行查询。
5. 从结果集中提取数据
这一步中演示如何从数据库中获取查询结果的数据。使用ResultSet.getXXX()方法来检索的数据结果
6. 清理环境资源
在使用JDBC与数据交互操作数据库中的数据后,应该明确地关闭所有的数据库资源以减少资源的浪费。本文使用了try with resources方式关闭资源,这是JDK7的语法糖,读者可自行搜索。
完整代码:
//STEP 1. 导入包
import java.sql.*;
class JDBCExample {
// JDBC驱动包名和数据库的URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/test";
// 数据库名和密码自己修改
static final String USER = "username";
static final String PASS = "password";
public static void main(String[] args) {
String sql = "SELECT id, first, last, age FROM Employees";
//STEP 2: 注册JDBC驱动程序
try {
Class.forName(JDBC_DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
// try with resources方式关闭资源。
//STEP 6: 清理环境资源
try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
//STEP 3: 打开一个连接
System.out.println("Connecting to database...");
// Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
//STEP 4: 执行一个查询
System.out.println("Creating statement...");
// Statement stmt = conn.createStatement();
// ResultSet rs = stmt.executeQuery(sql);
//STEP 5: 从结果集中提取数据
while (rs.next()) {
// 根据列名获取数据
int id = rs.getInt("id");
int age = rs.getInt("age");
String first = rs.getString("first");
String last = rs.getString("last");
// 显示结果
System.out.print("ID: " + id);
System.out.print(", Age: " + age);
System.out.print(", First: " + first);
System.out.println(", Last: " + last);
}
} catch (SQLException se) {
// 处理可能出现的错误
se.printStackTrace();
}
System.out.println("Goodbye!");
}
}