DriverManager.getConnection(url,user,pwd)
前置准备:添加数据库驱动依赖
Java通过JDBC(Java Database Connectivity)实现数据库连接,不同数据库需引入对应的驱动jar包或依赖,以下是常见数据库的驱动配置方式:
数据库类型 | 驱动依赖 | 说明 |
---|---|---|
MySQL | mysql:mysql-connector-java:8.0.34 (Maven坐标) |
需匹配MySQL版本,支持JDBC标准接口 |
Oracle | com.oracle.database.jdbc:ojdbc8:19.8.0.0 |
需下载Oracle官方驱动jar包或通过Maven引入 |
SQL Server | com.microsoft.sqlserver:mssql-jdbc:9.4.0.jre8 |
微软官方JDBC驱动 |
PostgreSQL | org.postgresql:postgresql:42.6.0 |
开源驱动,支持多种PostgreSQL版本 |
操作步骤:
- Maven项目:在
pom.xml
中添加对应依赖。 - 非Maven项目:手动将驱动jar包添加到
classpath
中(如IDEA的Libraries配置)。
加载数据库驱动类
JDBC需通过反射加载数据库驱动类,早期版本(JDK 6及之前)需显式调用Class.forName()
,高版本JDBC可自动加载,但建议显式声明以避免兼容性问题。
代码示例:
try { // 加载MySQL驱动(以MySQL为例) Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { System.err.println("驱动类未找到,请检查依赖是否添加"); e.printStackTrace(); }
说明:
- 不同数据库驱动类名不同(如Oracle为
oracle.jdbc.driver.OracleDriver
)。 - 如果使用JDK 6以上版本且驱动jar包已正确加载,可省略
Class.forName()
,但推荐保留以提升代码可读性。
配置数据库连接URL
连接URL需包含数据库类型、主机地址、端口、数据库名及参数,以下是常见数据库的URL格式:
数据库类型 | 连接URL模板 | 默认端口 |
---|---|---|
MySQL | jdbc:mysql://localhost:3306/database_name?useSSL=false&serverTimezone=UTC |
3306 |
Oracle | jdbc:oracle:thin:@localhost:1521:orcl |
1521 |
SQL Server | jdbc:sqlserver://localhost:1433;databaseName=database_name |
1433 |
PostgreSQL | jdbc:postgresql://localhost:5432/database_name |
5432 |
参数说明:
useSSL=false
:禁用SSL(MySQL特有,避免加密连接警告)。serverTimezone=UTC
:设置时区,避免时间偏差。databaseName
:指定连接的数据库名称。
建立数据库连接
通过DriverManager.getConnection()
获取连接对象,需传入URL、用户名和密码。
代码示例:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBConnectionDemo { public static void main(String[] args) { // 数据库连接信息 String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC"; String username = "root"; String password = "123456"; try (Connection connection = DriverManager.getConnection(url, username, password)) { if (connection != null) { System.out.println("数据库连接成功!"); } } catch (SQLException e) { System.err.println("连接失败,请检查URL、用户名或密码"); e.printStackTrace(); } } }
关键点:
- 异常处理:
SQLException
可能由URL错误、认证失败等原因抛出。 - 资源管理:使用
try-with-resources
确保连接自动关闭,避免资源泄露。
执行SQL与关闭连接
获取连接后,需创建Statement
或PreparedStatement
执行SQL,并在操作完成后关闭连接。
代码示例:
String query = "SELECT FROM users"; try (Connection conn = DriverManager.getConnection(url, username, password); PreparedStatement pstmt = conn.prepareStatement(query); ResultSet rs = pstmt.executeQuery()) { while (rs.next()) { // 处理结果集 System.out.println(rs.getString("username")); } } catch (SQLException e) { e.printStackTrace(); }
最佳实践:
- 优先使用
PreparedStatement
防止SQL注入。 - 关闭顺序:
ResultSet
→Statement
→Connection
。
连接池优化(可选)
频繁创建连接性能较低,推荐使用连接池(如HikariCP、Druid)。
HikariCP示例:
import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost:3306/testdb"); config.setUsername("root"); config.setPassword("123456"); HikariDataSource dataSource = new HikariDataSource(config); // 获取连接 try (Connection conn = dataSource.getConnection()) { // 执行SQL }
FAQs
Q1:加载驱动时出现ClassNotFoundException
怎么办?
A1:检查驱动jar包是否已添加到classpath
,或Maven依赖是否正确,例如MySQL需确保mysql-connector-java
版本与项目兼容。
Q2:连接成功后执行SQL却提示Communications exception
?
A2:可能是数据库服务未启动、端口错误或网络限制,需确认数据库服务器状态,并检查防火墙是否开放对应端口(如MySQL的3306)。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/67836.html