下面是详细讲解“JDBCTM 指南:入门3 - DriverManager”的完整攻略。
JDBCTM 指南:入门3 - DriverManager
在本文中,我们将介绍JDBC中的DriverManager
类,它是Java SQL API的一个基本组件,用于管理数据库驱动程序。
什么是 DriverManager
DriverManager
是Java提供的一个用于负责管理JDBC驱动程序的类。当应用程序的Java代码使用JDBC API重点连接数据库时,该类负责在后台加载适当的驱动器程序。
所有的JDBC驱动程序都必须实现java.sql.Driver
接口,以便被DriverManager
识别和管理。
DriverManager的主要方法
下面是一些DriverManager
类中的主要方法:
getConnection(String url, String user, String password)
:返回一个表示与给定数据库的连接的Connection
对象。其中,url是数据库的URL,user是连接数据库的用户名,password是连接数据库的密码。getDriver(String url)
:尝试查找已经注册的或者自动装载的Driver
对象,以备给定的URL可以连接。如果没有则会抛出异常。registerDriver(Driver driver)
:向DriverManager
注册给定的Driver
对象。deregisterDriver(Driver driver)
:注销已经注册的Driver
对象。getDrivers()
:返回 已经加载的所有 JDBC 驱动程序的枚举对象。
简单示例
下面是一个使用DriverManager
连接MySQL数据库的简单示例:
import java.sql.*;
public class JDBCExample {
// MySQL数据库连接的参数
private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
private static final String DB_URL = "jdbc:mysql://localhost/TEST";
private static final String USER = "root";
private static final String PASS = "password";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
// 注册 JDBC 驱动器
Class.forName(JDBC_DRIVER);
// 打开一个连接
System.out.println("连接到数据库...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
// 执行一个查询 SQL 语句
System.out.println("实例化Statement对象...");
stmt = conn.createStatement();
String sql;
sql = "SELECT id, name, age FROM Employees";
ResultSet rs = stmt.executeQuery(sql);
// 展开结果集数据库
while(rs.next()) {
// 通过字段检索
int id = rs.getInt("id");
int age = rs.getInt("age");
String name = rs.getString("name");
// 输出数据
System.out.print("ID: " + id);
System.out.print(", 名字: " + name);
System.out.print(", 年龄: " + age);
System.out.println();
}
// 清理环境
rs.close();
stmt.close();
conn.close();
} catch(SQLException se) {
// 处理 JDBC 错误
se.printStackTrace();
} catch(Exception e) {
// 处理 Class.forName 错误
e.printStackTrace();
} finally {
// 最后是用于关闭资源的块
try {
if(stmt != null) stmt.close();
} catch(SQLException se2) {
} // 什么都不做
try {
if(conn != null) conn.close();
} catch(SQLException se) {
se.printStackTrace();
} // 结束finally try
} // 结束try
System.out.println("Goodbye!");
}
}
这个示例演示了使用DriverManager
连接MySQL数据库,执行了一个查询SQL语句,并将结果集输出到控制台。
DriverManager性能问题
请注意,DriverManager
在连接数据库时通常会导致性能问题,因为它的连接字符串和驱动程序都存储在静态的单例变量中。这意味着每次使用getConnection
方法时都会重新解析连接字符串,创建新的实例并加载驱动程序。
为了避免这些性能问题,建议使用连接池来管理数据库连接。
示例:使用Apache Common DBCP连接池
下面是使用Apache Common DBCP连接池连接MySQL数据库的示例:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.sql.DataSource;
import org.apache.commons.dbcp2.BasicDataSource;
public class DBCPExample {
// MySQL数据库连接的参数
private static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
private static final String DB_URL = "jdbc:mysql://localhost/TEST";
private static final String USER = "root";
private static final String PASS = "password";
// 连接池的参数
private static final int MAX_TOTAL = 10;
private static final int MAX_IDLE = 5;
private static final int MIN_IDLE = 2;
private static final boolean TEST_ON_BORROW = true;
public static void main(String[] args) {
try {
// 创建带有连接池的数据源
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(JDBC_DRIVER);
dataSource.setUrl(DB_URL);
dataSource.setUsername(USER);
dataSource.setPassword(PASS);
dataSource.setMaxTotal(MAX_TOTAL);
dataSource.setMaxIdle(MAX_IDLE);
dataSource.setMinIdle(MIN_IDLE);
dataSource.setTestOnBorrow(TEST_ON_BORROW);
// 从连接池中获取数据库连接
System.out.println("连接到数据库...");
Connection conn = dataSource.getConnection();
// 执行一个查询 SQL 语句
System.out.println("实例化PreparedStatement对象...");
PreparedStatement ps = conn.prepareStatement("SELECT id, name, age FROM Employees");
ResultSet rs = ps.executeQuery();
// 展开结果集数据库
while(rs.next()) {
// 通过字段检索
int id = rs.getInt("id");
int age = rs.getInt("age");
String name = rs.getString("name");
// 输出数据
System.out.print("ID: " + id);
System.out.print(", 名字: " + name);
System.out.print(", 年龄: " + age);
System.out.println();
}
// 清理环境
rs.close();
ps.close();
conn.close();
dataSource.close();
} catch(Exception e) {
e.printStackTrace();
}
System.out.println("Goodbye!");
}
}
这个示例中,我们使用Apache Common DBCP连接池代替直接使用DriverManager
来管理数据库连接。连接池中的连接是预先创建的,因此连接池中的所有连接都已经经过初始化并获得了与数据库的连接。我们只需要从连接池中请求一个可用连接即可。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JDBCTM 指南:入门3 – DriverManager - Python技术站