Of course! Here is a comprehensive guide to using the MySQL Connector/J (the official JDBC driver for MySQL) with Java.

What is MySQL Connector/J?
MySQL Connector/J is the official JDBC driver for connecting Java applications to MySQL and MariaDB databases. It's a JAR (Java Archive) file that you include in your project. It translates standard JDBC calls into the network protocol that MySQL understands.
How to Add the Connector to Your Project
You need to add the Connector/J library to your project's classpath. Here are the most common ways to do this.
Option A: For Maven Projects (Recommended)
If you use a build tool like Maven, you simply add the dependency to your pom.xml file. Maven will automatically download the library.
<dependencies>
<!-- MySQL Connector/J -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.33</version> <!-- Check for the latest version -->
</dependency>
</dependencies>
Option B: For Gradle Projects
If you use Gradle, add the dependency to your build.gradle file (for Groovy DSL) or build.gradle.kts (for Kotlin DSL).

Groovy DSL (build.gradle):
dependencies {
// MySQL Connector/J
implementation 'com.mysql:mysql-connector-j:8.0.33' // Check for the latest version
}
Kotlin DSL (build.gradle.kts):
dependencies {
// MySQL Connector/J
implementation("com.mysql:mysql-connector-j:8.0.33") // Check for the latest version
}
Option C: For Manual Projects (No Build Tool)
-
Download the JAR: Go to the MySQL Connector/J Download Page and download the platform independent ZIP archive.
-
Add to Classpath:
(图片来源网络,侵删)-
In an IDE (like IntelliJ or Eclipse): Right-click on your project -> Build Path / Project Structure -> Libraries -> Add External JARs... and select the downloaded
.jarfile. -
From the command line: Use the
-cp(or-classpath) flag when compiling and running your Java code.# Compile javac -cp ".:/path/to/mysql-connector-j-8.0.33.jar" YourJavaFile.java # Run java -cp ".:/path/to/mysql-connector-j-8.0.33.jar" YourJavaClass
(Note: The path separator is on Linux/macOS and on Windows.)
-
The JDBC URL Connection String
To connect to the database, you need a JDBC URL. Its format is crucial.
Standard Format:
jdbc:mysql://[host][:port]/[database-name]
jdbc:mysql://: The protocol and sub-protocol.[host]: The server address (e.g.,localhost,0.0.1, or a remote IP/hostname). Defaults tolocalhostif omitted.[:port]: The port number MySQL is listening on. The default is3306. You can omit this if you're using the default./[database-name]: The name of the specific database you want to connect to.
Examples:
- Connect to a database named
mydbon the local machine:jdbc:mysql://localhost/mydb - Connect to a database named
production_dbon a remote server atdb.example.comon port3307:jdbc:mysql://db.example.com:3307/production_db
Important Parameters (added to the end of the URL):
You can add connection parameters using the and & symbols.
user: The database username.password: The database password.useSSL: Should SSL be used?falseis common for local development.trueis recommended for production.serverTimezone: Specifies the timezone for the server. This is mandatory for newer versions of Connector/J to prevent a runtime exception.UTCis a safe choice.allowPublicKeyRetrieval:truecan be needed in some cloud environments (like AWS RDS) to allow the driver to get the server's public key.
Example with Parameters:
jdbc:mysql://localhost:3306/mydb?user=root&password=secret&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
Complete Java Code Example (Best Practices)
This example demonstrates the standard way to interact with a database using JDBC. The key is to always use PreparedStatement to prevent SQL injection and to always close resources in a finally block or using a try-with-resources statement.
Setup: Let's assume you have a table employees:
CREATE DATABASE mydb;
USE mydb;
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
position VARCHAR(100),
salary DECIMAL(10, 2)
);
INSERT INTO employees (name, position, salary) VALUES
('Alice', 'Developer', 90000.00),
('Bob', 'Manager', 105000.00),
('Charlie', 'Developer', 95000.00);
Java Code (DatabaseExample.java):
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DatabaseExample {
// --- Database Connection Details ---
// IMPORTANT: Replace with your own database details
private static final String DB_URL = "jdbc:mysql://localhost:3306/mydb?user=root&password=your_password&serverTimezone=UTC";
private static final String DB_DRIVER = "com.mysql.cj.jdbc.Driver";
public static void main(String[] args) {
// The 'try-with-resources' statement ensures that the connection is closed automatically.
try (Connection conn = DriverManager.getConnection(DB_URL)) {
System.out.println("Connection to MySQL database successful!");
// 1. Example: Select all employees
selectAllEmployees(conn);
// 2. Example: Select a specific employee by ID using PreparedStatement (safe from SQL injection)
selectEmployeeById(conn, 2);
// 3. Example: Insert a new employee using PreparedStatement
// insertEmployee(conn, "David", "QA Engineer", 80000.00);
} catch (SQLException e) {
System.err.println("Database connection or query failed!");
e.printStackTrace();
}
}
/**
* Selects and prints all employees from the database.
*/
private static void selectAllEmployees(Connection conn) throws SQLException {
String sql = "SELECT id, name, position, salary FROM employees";
// The 'try-with-resources' statement ensures that the statement and result set are closed.
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
System.out.println("\n--- All Employees ---");
while (rs.next()) {
// Retrieve by column name for clarity and robustness
int id = rs.getInt("id");
String name = rs.getString("name");
String position = rs.getString("position");
double salary = rs.getDouble("salary");
System.out.printf("ID: %d, Name: %s, Position: %s, Salary: %.2f%n", id, name, position, salary);
}
}
}
/**
* Selects a single employee by their ID using a PreparedStatement.
*/
private static void selectEmployeeById(Connection conn, int employeeId) throws SQLException {
String sql = "SELECT id, name, position, salary FROM employees WHERE id = ?";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
// Set the value for the '?' placeholder
pstmt.setInt(1, employeeId);
try (ResultSet rs = pstmt.executeQuery()) {
System.out.println("\n--- Employee with ID " + employeeId + " ---");
if (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String position = rs.getString("position");
double salary = rs.getDouble("salary");
System.out.printf("ID: %d, Name: %s, Position: %s, Salary: %.2f%n", id, name, position, salary);
} else {
System.out.println("No employee found with ID " + employeeId);
}
}
}
}
/**
* Inserts a new employee into the database.
*/
private static void insertEmployee(Connection conn, String name, String position, double salary) throws SQLException {
// '?' are placeholders for user input, preventing SQL injection
String sql = "INSERT INTO employees (name, position, salary) VALUES (?, ?, ?)";
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
// Set the values for the placeholders
pstmt.setString(1, name);
pstmt.setString(2, position);
pstmt.setDouble(3, salary);
int rowsAffected = pstmt.executeUpdate();
System.out.println(rowsAffected + " row 