在Java中建立数据库连接是开发数据库应用的基础操作,通常通过JDBC(Java Database Connectivity)实现,JDBC是Java提供的标准API,用于连接和操作各种关系型数据库,以下是详细的步骤和代码示例,帮助您理解如何用Java建立数据库连接。
加载JDBC驱动
首先需要加载对应数据库的JDBC驱动,驱动是一个jar包,不同数据库有不同的驱动,如MySQL的mysql-connector-java
、Oracle的ojdbc.jar
等,加载驱动通过Class.forName()
方法实现,
Class.forName("com.mysql.cj.jdbc.Driver");
获取数据库连接
加载驱动后,使用DriverManager.getConnection()
方法获取连接,该方法需要三个参数:数据库URL、用户名和密码,数据库URL的格式因数据库而异,例如MySQL的URL格式为:
String url = "jdbc:mysql://localhost:3306/数据库名?useSSL=false&serverTimezone=UTC"; String username = "root"; String password = "password"; Connection connection = DriverManager.getConnection(url, username, password);
创建Statement或PreparedStatement
获取连接后,可以通过connection.createStatement()
创建Statement
对象,用于执行SQL语句,为了防止SQL注入,推荐使用PreparedStatement
:
String sql = "SELECT * FROM users WHERE id = ?"; PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setInt(1, 1);
执行SQL查询
使用preparedStatement.executeQuery()
执行查询语句,返回ResultSet
对象;对于更新操作,使用executeUpdate()
:
ResultSet resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { System.out.println("ID: " + resultSet.getInt("id") + ", Name: " + resultSet.getString("name")); }
关闭资源
操作完成后,需关闭ResultSet
、Statement
和Connection
对象,释放资源:
resultSet.close(); preparedStatement.close(); connection.close();
完整代码示例
以下是一个完整的Java程序示例,展示如何连接MySQL数据库并查询数据:
import java.sql.*; public class DatabaseConnection { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC"; String username = "root"; String password = "password"; try { // 1. 加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 2. 获取连接 Connection connection = DriverManager.getConnection(url, username, password); // 3. 创建PreparedStatement String sql = "SELECT * FROM users"; PreparedStatement preparedStatement = connection.prepareStatement(sql); // 4. 执行查询 ResultSet resultSet = preparedStatement.executeQuery(); // 5. 处理结果 while (resultSet.next()) { System.out.println("ID: " + resultSet.getInt("id") + ", Name: " + resultSet.getString("name") + ", Email: " + resultSet.getString("email")); } // 6. 关闭资源 resultSet.close(); preparedStatement.close(); connection.close(); } catch (ClassNotFoundException e) { System.err.println("JDBC驱动未找到: " + e.getMessage()); } catch (SQLException e) { System.err.println("数据库连接或查询出错: " + e.getMessage()); } } }
数据库连接参数说明
参数 | 说明 | 示例 |
---|---|---|
URL | 数据库连接地址,包括主机、端口和数据库名 | jdbc:mysql://localhost:3306/testdb |
Username | 数据库用户名 | root |
Password | 数据库密码 | password |
SSL | 是否启用SSL加密 | useSSL=false |
ServerTimezone | 服务器时区 | serverTimezone=UTC |
常见问题及解决方法
- 驱动加载失败:确保JDBC驱动jar包已添加到项目中,并检查类名是否正确。
- 连接超时:检查数据库服务是否启动,URL、用户名和密码是否正确,以及网络是否畅通。
相关问答FAQs
Q1: 如何在Maven项目中添加MySQL JDBC驱动依赖?
A1: 在pom.xml
文件中添加以下依赖:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency>
Q2: 为什么使用PreparedStatement而不是Statement?
A2: PreparedStatement
可以防止SQL注入攻击,并且对于重复执行的SQL语句,性能更高,因为它会预编译SQL语句。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复