如何用java连接数据库
使用JDBC连接数据库
JDBC(Java Database Connectivity)是Java中连接数据库的标准API。以下是使用JDBC连接MySQL数据库的示例步骤。
添加JDBC驱动依赖 在Maven项目中,添加MySQL JDBC驱动依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
加载驱动并建立连接
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DatabaseConnection {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
try {
Connection connection = DriverManager.getConnection(url, username, password);
System.out.println("数据库连接成功");
connection.close();
} catch (SQLException e) {
System.out.println("数据库连接失败");
e.printStackTrace();
}
}
}
使用连接池提高性能
对于生产环境,建议使用连接池管理数据库连接。以下是使用HikariCP连接池的示例。
添加HikariCP依赖

<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>5.0.1</version>
</dependency>
配置连接池
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
public class ConnectionPoolExample {
public static void main(String[] args) {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase");
config.setUsername("root");
config.setPassword("password");
config.setMaximumPoolSize(10);
try (HikariDataSource dataSource = new HikariDataSource(config)) {
System.out.println("连接池创建成功");
}
}
}
执行SQL查询
建立连接后,可以执行SQL查询并处理结果。
查询示例

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class QueryExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
try (Connection connection = DriverManager.getConnection(url, username, password);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM users")) {
while (resultSet.next()) {
System.out.println("ID: " + resultSet.getInt("id"));
System.out.println("Name: " + resultSet.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
使用PreparedStatement防止SQL注入
对于参数化查询,应使用PreparedStatement。
PreparedStatement示例
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class PreparedStatementExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
try (Connection connection = DriverManager.getConnection(url, username, password);
PreparedStatement statement = connection.prepareStatement(
"INSERT INTO users (name, email) VALUES (?, ?)")) {
statement.setString(1, "John Doe");
statement.setString(2, "john@example.com");
int rowsInserted = statement.executeUpdate();
System.out.println(rowsInserted + " rows inserted.");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
事务管理
对于需要原子性操作的情况,可以使用事务。
事务示例
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class TransactionExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";
String username = "root";
String password = "password";
try (Connection connection = DriverManager.getConnection(url, username, password)) {
connection.setAutoCommit(false);
try (Statement statement = connection.createStatement()) {
statement.executeUpdate("UPDATE accounts SET balance = balance - 100 WHERE id = 1");
statement.executeUpdate("UPDATE accounts SET balance = balance + 100 WHERE id = 2");
connection.commit();
System.out.println("事务提交成功");
} catch (SQLException e) {
connection.rollback();
System.out.println("事务回滚");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}






