在现代软件开发中,数据库连接是不可或缺的一部分,Java作为一种广泛使用的编程语言,提供了丰富的API来与各种数据库进行交互,本文将详细介绍如何在Java中连接MySQL数据库,并实现基本的数据交互功能,以下是具体操作流程:

环境准备
1、安装 MySQL
确保你已经安装了MySQL数据库,可以通过MySQL官网下载并安装适合你操作系统的版本。
2、创建数据库和表
在安装完成后,登录MySQL命令行工具,创建一个名为test_db的数据库,并在其中创建一个名为users的表:
```sql
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL
);
```
3、添加MySQL Connector/J依赖
在Java项目中,你需要添加MySQL Connector/J作为依赖,如果你使用Maven,可以在pom.xml中添加如下依赖:
```xml
<dependency>
<groupId>mysql</groupId>
<artifactId>mysqlconnectorjava</artifactId>
<version>8.0.32</version> <!请根据最新版本更新 >
</dependency>
```
Java代码实现
1、创建数据库连接
在Java代码中实现与MySQL数据库的连接,以下是一个简单的连接示例:
```java
package com.example.demo;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class MySQLConnection {
private static final String URL = "jdbc:mysql://localhost:3306/test_db"; // 数据库地址
private static final String USER = "root"; // 数据库用户名
private static final String PASSWORD = "your_password"; // 数据库密码
public static Connection getConnection() {
Connection connection = null;
try {
// 加载JDBC驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 获取数据库连接
connection = DriverManager.getConnection(URL, USER, PASSWORD);
System.out.println("数据库连接成功!");
} catch (ClassNotFoundException e) {
System.out.println("找不到JDBC驱动!" + e.getMessage());
} catch (SQLException e) {
System.out.println("数据库连接失败!" + e.getMessage());
}
return connection;
}
}
```
2、插入数据
我们编写一个方法来插入用户数据到users表中:
```java
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class UserDAO {
public void addUser(String username, String password) {
String sql = "INSERT INTO users (username, password) VALUES (?, ?)";
try (Connection connection = MySQLConnection.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, username);
preparedStatement.setString(2, password);

int rowsAffected = preparedStatement.executeUpdate();
System.out.println("成功插入 " + rowsAffected + " 行数据。");
} catch (SQLException e) {
System.out.println("插入数据失败!" + e.getMessage());
}
}
}
```
3、查询数据
下面是一个查询用户数据的方法:
```java
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class UserDAO {
// 其他代码...
public void getAllUsers() {
String sql = "SELECT * FROM users";
try (Connection connection = MySQLConnection.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
int id = resultSet.getInt("id");
String username = resultSet.getString("username");
String email = resultSet.getString("email");
System.out.println("ID: " + id + ", Username: " + username + ", Email: " + email);
}
} catch (SQLException e) {
System.out.println("查询数据失败!" + e.getMessage());
}
}
}
```
4、执行SQL插入和更新
您也可以使用Statement或PreparedStatement对象执行SQL插入和更新操作:
```java
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class InsertUpdateExample {
public static void main(String[] args) {
try (Connection connection = DatabaseConnection.getConnection()) {
PreparedStatement preparedStatement = connection.prepareStatement("INSERT INTO users (username, email) VALUES (?, ?)");
preparedStatement.setString(1, "john");
preparedStatement.setString(2, "john@example.com");
int rowsInserted = preparedStatement.executeUpdate();
if (rowsInserted > 0) {
System.out.println("A new user was inserted successfully!");
}
} catch (SQLException e) {
System.out.println("插入数据失败!" + e.getMessage());
}
}
}
```
5、执行SQL删除
当需要删除数据库中的记录时,可以使用SQL中的DELETE语句,下面是使用Java执行DELETE操作的示例代码:
```java
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DeleteExample {

public static void main(String[] args) {
try (Connection connection = DatabaseConnection.getConnection()) {
PreparedStatement preparedStatement = connection.prepareStatement("DELETE FROM users WHERE id = ?");
// 设置要删除的记录的ID
int userIdToDelete = 1;
preparedStatement.setInt(1, userIdToDelete);
// 执行删除操作
int rowsDeleted = preparedStatement.executeUpdate();
if (rowsDeleted > 0) {
System.out.println("User with ID " + userIdToDelete + " was deleted successfully!");
}
} catch (SQLException e) {
System.out.println("删除数据失败!" + e.getMessage());
}
}
}
```
FAQs
1、问题1:为什么连接MySQL数据库时会出现“找不到JDBC驱动”的错误?
解答:这种错误通常是由于未正确导入MySQL Connector/J的jar包导致的,确保已经将jar包添加到项目的类路径中,并且使用的JDBC驱动版本与MySQL数据库版本匹配,检查是否在代码中正确加载了驱动类(如com.mysql.cj.jdbc.Driver)。
2、问题2:如何防止SQL注入攻击?
解答:使用PreparedStatement代替Statement可以有效防止SQL注入攻击,PreparedStatement会自动转义SQL语句中的参数,避免恶意输入被直接拼接到SQL语句中,以下代码展示了如何使用PreparedStatement安全地插入数据:
```java
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class SafeUserDAO {
public void addUser(String username, String password) {
String sql = "INSERT INTO users (username, password) VALUES (?, ?)";
try (Connection connection = MySQLConnection.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setString(1, username);
preparedStatement.setString(2, password);
int rowsAffected = preparedStatement.executeUpdate();
System.out.println("成功插入 " + rowsAffected + " 行数据。");
} catch (SQLException e) {
System.out.println("插入数据失败!" + e.getMessage());
}
}
}
```
在Java中连接MySQL数据库通常遵循以下步骤:
1、添加MySQL JDBC驱动:
需要在项目中包含MySQL JDBC驱动的jar文件,这可以通过将MySQL JDBC驱动添加到项目的依赖管理中(如Maven或Gradle)来实现,或者手动下载并添加到项目的类路径中。
2、加载驱动:
使用Class.forName()方法加载MySQL JDBC驱动。
3、建立连接:
使用DriverManager.getConnection()方法建立与数据库的连接。
4、创建Statement或PreparedStatement:
根据需要执行SQL语句,可以使用Connection.createStatement()或Connection.prepareStatement()。
5、执行SQL语句:
使用Statement或PreparedStatement对象的executeQuery()方法执行查询,或者executeUpdate()方法执行更新、插入或删除操作。
6、处理结果:
对于查询操作,使用ResultSet处理结果集。
7、关闭资源:
无论是查询结果集、Statement还是数据库连接,使用完毕后都应该关闭,以释放资源。
以下是连接MySQL数据库的Java代码示例:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MySQLConnection {
// 数据库连接参数
private static final String URL = "jdbc:mysql://localhost:3306/your_database";
private static final String USER = "your_username";
private static final String PASSWORD = "your_password";
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
// 加载MySQL JDBC驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 建立连接
conn = DriverManager.getConnection(URL, USER, PASSWORD);
// 创建PreparedStatement
String sql = "SELECT * FROM your_table";
pstmt = conn.prepareStatement(sql);
// 执行查询
rs = pstmt.executeQuery();
// 处理查询结果
while (rs.next()) {
// 获取数据
String data = rs.getString("column_name");
System.out.println(data);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭资源
try {
if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
注意事项:
确保数据库服务正在运行,并且指定的数据库和表存在。
处理数据库连接时,应该使用trywithresources语句或者显式关闭资源,以避免资源泄露。
数据库连接字符串中的参数应替换为实际的数据库URL、用户名和密码。
在生产环境中,敏感信息如用户名和密码不应该硬编码在代码中,而应该通过配置文件或环境变量等方式来管理。