Java连接数据库的核心步骤包括加载驱动、建立连接、执行操作等,以下是详细说明:
Java连接数据库的核心步骤
步骤 | 实现方式 | 说明 |
---|---|---|
加载驱动 | Class.forName("com.mysql.cj.jdbc.Driver") |
通过反射加载数据库驱动类,触发注册驱动到DriverManager 。 |
建立连接 | DriverManager.getConnection(url, user, password) |
URL格式因数据库类型而异(如MySQL为jdbc:mysql://host:port/dbname )。 |
执行操作 | Statement 或PreparedStatement |
普通语句直接执行SQL,预处理语句支持参数化查询,防止SQL注入。 |
关闭资源 | connection.close() |
必须手动关闭连接、语句和结果集,建议使用try-with-resources 语法。 |
不同数据库的驱动与连接字符串
数据库类型 | 驱动依赖 | 连接字符串格式 | 示例 |
---|---|---|---|
MySQL | mysql-connector-java |
jdbc:mysql://host:port/dbname?param=value |
jdbc:mysql://localhost:3306/test |
PostgreSQL | postgresql |
jdbc:postgresql://host:port/dbname |
jdbc:postgresql://localhost:5432/test |
Oracle | ojdbc |
jdbc:oracle:thin:@host:port:service |
jdbc:oracle:thin:@localhost:1521:orcl |
SQL Server | mssql-jdbc |
jdbc:sqlserver://host:port;databaseName=db |
jdbc:sqlserver://localhost:1433;databaseName=test |
SQLite | sqlite-jdbc |
jdbc:sqlite:filepath |
jdbc:sqlite:src/test.db |
完整代码示例(以MySQL为例)
import java.sql.; public class DatabaseConnection { public static void main(String[] args) { // 配置参数 String url = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC"; String user = "root"; String password = "123456"; // 加载驱动(可选,JDBC 4.0+自动加载) try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { System.out.println("驱动加载失败!"); e.printStackTrace(); return; } // 建立连接并执行操作 try (Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement()) { String sql = "SELECT FROM users"; ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { System.out.println(rs.getString("username")); } } catch (SQLException e) { e.printStackTrace(); } } }
进阶优化与最佳实践
-
使用连接池
直接使用DriverManager
每次创建连接效率低,推荐使用连接池(如HikariCP、Druid):HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost:3306/test"); config.setUsername("root"); config.setPassword("123456"); HikariDataSource ds = new HikariDataSource(config); Connection conn = ds.getConnection(); // 从池中获取连接
-
参数化查询
避免字符串拼接导致的SQL注入:String sql = "SELECT FROM users WHERE id = ?"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setInt(1, userId); ResultSet rs = pstmt.executeQuery(); }
-
异常处理
SQLException
:捕获数据库操作异常(如连接失败、语法错误)。ClassNotFoundException
:驱动类未找到(需检查依赖库)。
-
安全性建议
- 密码应通过配置文件或环境变量管理,避免硬编码。
- 使用SSL加密连接(如MySQL的
useSSL=true
)。
常见问题与解决方案
FAQs:
问题:ClassNotFoundException
如何解决?
- 原因:未正确引入数据库驱动依赖。
- 解决:在Maven项目中添加对应依赖(如MySQL的
mysql-connector-java
),或手动将驱动JAR包加入类路径。
问题:连接超时或失败如何排查?
- 检查步骤:
- 确认数据库服务已启动,且主机、端口、用户名、密码正确。
- 检查防火墙或网络策略是否允许访问数据库端口(如MySQL默认3306)。
- 测试连接字符串格式是否正确(如PostgreSQL
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/74073.html