数据库连接与创建的基础准备
在Java中创建数据库并存储信息,首先需要明确数据库的类型和连接方式,常见的数据库包括MySQL、PostgreSQL、SQLite等,不同数据库的驱动和连接方式略有差异,以MySQL为例,开发前需要完成以下准备工作:安装MySQL数据库服务器、创建数据库用户、获取数据库连接地址、端口以及认证凭据,需在Java项目中添加对应的数据库驱动依赖,例如Maven项目可在pom.xml中添加MySQL Connector/J的依赖,确保运行时能够正确加载驱动类。

使用JDBC连接数据库
Java通过JDBC(Java Database Connectivity)规范与数据库交互,连接数据库的基本步骤包括:加载驱动类、建立连接、创建执行语句、处理结果集以及关闭资源,以下是一个典型的MySQL连接示例代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DatabaseConnector {
private static final String URL = "jdbc:mysql://localhost:3306/";
private static final String USER = "username";
private static final String PASSWORD = "password";
public static Connection getConnection() throws SQLException {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
return DriverManager.getConnection(URL, USER, PASSWORD);
} catch (ClassNotFoundException e) {
throw new SQLException("MySQL Driver not found", e);
}
}
}
创建数据库与表的SQL操作
连接成功后,可以通过执行SQL语句创建数据库和表,通常使用Statement或PreparedStatement对象执行DDL(数据定义语言)语句,创建一个名为user_info的数据库,并在其中创建users表:
import java.sql.Connection;
import java.sql.Statement;
public class DatabaseCreator {
public static void createDatabaseAndTables() {
String createDatabaseSQL = "CREATE DATABASE IF NOT EXISTS user_info";
String useDatabaseSQL = "USE user_info";
String createTableSQL = "CREATE TABLE IF NOT EXISTS users (" +
"id INT AUTO_INCREMENT PRIMARY KEY," +
"username VARCHAR(50) NOT NULL," +
"email VARCHAR(100) NOT NULL UNIQUE," +
"created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)";
try (Connection conn = DatabaseConnector.getConnection();
Statement stmt = conn.createStatement()) {
// 创建数据库
stmt.executeUpdate(createDatabaseSQL);
// 切换到目标数据库
stmt.executeUpdate(useDatabaseSQL);
// 创建表
stmt.executeUpdate(createTableSQL);
System.out.println("Database and tables created successfully.");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
插入数据的实现方式
数据存储的核心在于向表中插入记录,推荐使用PreparedStatement防止SQL注入,并提高执行效率,以下示例演示向users表中插入用户信息:

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class DataInserter {
public static void insertUser(String username, String email) {
String insertSQL = "INSERT INTO users (username, email) VALUES (?, ?)";
try (Connection conn = DatabaseConnector.getConnection();
PreparedStatement pstmt = conn.prepareStatement(insertSQL)) {
pstmt.setString(1, username);
pstmt.setString(2, email);
int affectedRows = pstmt.executeUpdate();
if (affectedRows > 0) {
System.out.println("User inserted successfully.");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
查询与验证数据存储
插入数据后,可通过查询语句验证存储结果,使用ResultSet处理查询结果,确保数据正确写入数据库:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DataQuery {
public static void displayUsers() {
String querySQL = "SELECT id, username, email FROM users";
try (Connection conn = DatabaseConnector.getConnection();
PreparedStatement pstmt = conn.prepareStatement(querySQL);
ResultSet rs = pstmt.executeQuery()) {
System.out.println("Current users:");
while (rs.next()) {
int id = rs.getInt("id");
String username = rs.getString("username");
String email = rs.getString("email");
System.out.printf("ID: %d, Username: %s, Email: %s%n", id, username, email);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
事务管理与数据一致性
在涉及多表操作或复杂业务逻辑时,事务管理至关重要,通过Connection对象的setAutoCommit(false)方法手动控制事务提交,确保数据一致性:
public class TransactionManager {
public static void transferData(int fromUserId, int toUserId, double amount) {
String updateSQL1 = "UPDATE accounts SET balance = balance - ? WHERE id = ?";
String updateSQL2 = "UPDATE accounts SET balance = balance + ? WHERE id = ?";
try (Connection conn = DatabaseConnector.getConnection()) {
conn.setAutoCommit(false);
try (PreparedStatement pstmt1 = conn.prepareStatement(updateSQL1);
PreparedStatement pstmt2 = conn.prepareStatement(updateSQL2)) {
pstmt1.setDouble(1, amount);
pstmt1.setInt(2, fromUserId);
pstmt1.executeUpdate();
pstmt2.setDouble(1, amount);
pstmt2.setInt(2, toUserId);
pstmt2.executeUpdate();
conn.commit();
System.out.println("Transaction completed successfully.");
} catch (SQLException e) {
conn.rollback();
System.out.println("Transaction failed: " + e.getMessage());
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (conn != null) conn.setAutoCommit(true);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
资源管理与最佳实践
数据库连接是有限资源,必须确保在使用后正确关闭,推荐使用try-with-resources语句自动关闭Connection、Statement和ResultSet,避免资源泄漏,应合理配置连接池(如HikariCP)以提高性能,特别是在高并发场景下,定期备份数据库、优化SQL语句、避免N+1查询等问题,是保证系统稳定运行的关键。

通过JDBC实现Java数据库创建与信息存储,需经历驱动加载、连接建立、SQL执行、结果处理等步骤,结合事务管理、资源优化和安全性防护,可构建健壮的数据持久化层,开发者应根据实际需求选择合适的数据库类型和连接方式,遵循最佳实践,确保数据操作的高效与可靠。


















