java怎么建立数据库
- 后端开发
- 2025-09-01
- 8
Java中建立数据库连接和操作数据库是一个常见的任务,通常涉及以下几个步骤:选择数据库、添加数据库驱动、建立连接、执行SQL语句以及处理结果集,下面将详细介绍这一过程,并提供示例代码。
选择数据库
你需要选择一个数据库管理系统(DBMS),常见的关系型数据库包括MySQL、PostgreSQL、Oracle、SQL Server等,本文以MySQL为例进行说明。
添加数据库驱动
要在Java中连接数据库,需要使用相应的数据库驱动,对于MySQL,可以使用官方提供的mysql-connector-java驱动,你可以通过Maven或手动下载JAR文件来添加驱动。
使用Maven添加依赖:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency>
手动下载JAR文件:
从MySQL官方网站下载mysql-connector-java的JAR文件,并将其添加到项目的类路径中。

建立数据库连接
使用JDBC(Java Database Connectivity)API来建立与数据库的连接,JDBC提供了统一的接口来访问各种数据库。
示例代码:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DatabaseConnection { private static final String URL = "jdbc:mysql://localhost:3306/mydatabase"; private static final String USER = "root"; private static final String PASSWORD = "password"; public static void main(String[] args) { try { // 加载数据库驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 建立连接 Connection connection = DriverManager.getConnection(URL, USER, PASSWORD); System.out.println("连接成功!"); // 关闭连接 connection.close(); } catch (ClassNotFoundException e) { System.out.println("驱动加载失败!"); e.printStackTrace(); } catch (SQLException e) { System.out.println("连接失败!"); e.printStackTrace(); } } }
执行SQL语句
建立连接后,可以执行SQL语句来操作数据库,常见的操作包括查询、插入、更新和删除。
示例代码:

使用PreparedStatement防止SQL载入
为了提高安全性,建议使用PreparedStatement来执行SQL语句,特别是当SQL语句包含用户输入时。
示例代码:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class InsertData { private static final String URL = "jdbc:mysql://localhost:3306/mydatabase"; private static final String USER = "root"; private static final String PASSWORD = "password"; public static void main(String[] args) { try { // 加载数据库驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 建立连接 Connection connection = DriverManager.getConnection(URL, USER, PASSWORD); // 创建PreparedStatement对象 String sql = "INSERT INTO users (name, email) VALUES (?, ?)"; PreparedStatement preparedStatement = connection.prepareStatement(sql); // 设置参数 preparedStatement.setString(1, "John Doe"); preparedStatement.setString(2, "john.doe@example.com"); // 执行插入 int rowsAffected = preparedStatement.executeUpdate(); System.out.println("插入成功,影响行数:" + rowsAffected); // 关闭资源 preparedStatement.close(); connection.close(); } catch (ClassNotFoundException e) { System.out.println("驱动加载失败!"); e.printStackTrace(); } catch (SQLException e) { System.out.println("SQL执行失败!"); e.printStackTrace(); } } }
使用事务管理
在执行多个SQL语句时,可以使用事务来确保数据的一致性,事务允许你将多个操作作为一个单元来执行,要么全部成功,要么全部回滚。
示例代码:

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class TransactionExample { private static final String URL = "jdbc:mysql://localhost:3306/mydatabase"; private static final String USER = "root"; private static final String PASSWORD = "password"; public static void main(String[] args) { try { // 加载数据库驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 建立连接 Connection connection = DriverManager.getConnection(URL, USER, PASSWORD); // 关闭自动提交 connection.setAutoCommit(false); try { // 创建PreparedStatement对象 String sql1 = "UPDATE accounts SET balance = balance ? WHERE id = ?"; PreparedStatement pstmt1 = connection.prepareStatement(sql1); pstmt1.setDouble(1, 100); pstmt1.setInt(2, 1); pstmt1.executeUpdate(); String sql2 = "UPDATE accounts SET balance = balance + ? WHERE id = ?"; PreparedStatement pstmt2 = connection.prepareStatement(sql2); pstmt2.setDouble(1, 100); pstmt2.setInt(2, 2); pstmt2.executeUpdate(); // 提交事务 connection.commit(); System.out.println("事务提交成功!"); } catch (SQLException e) { // 回滚事务 connection.rollback(); System.out.println("事务回滚!"); e.printStackTrace(); } finally { // 关闭资源 connection.close(); } } catch (ClassNotFoundException e) { System.out.println("驱动加载失败!"); e.printStackTrace(); } catch (SQLException e) { System.out.println("SQL执行失败!"); e.printStackTrace(); } } }
使用连接池优化性能
在实际应用中,频繁地建立和关闭数据库连接会影响性能,可以使用连接池来管理数据库连接,提高性能和资源利用率,常用的连接池库有HikariCP、C3P0、Druid等。
示例代码(使用HikariCP):
import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; public class ConnectionPoolExample { private static HikariDataSource dataSource; static { HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase"); config.setUsername("root"); config.setPassword("password"); config.addDataSourceProperty("cachePrepStmts", "true"); config.addDataSourceProperty("prepStmtCacheSize", "250"); config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); dataSource = new HikariDataSource(config); } public static void main(String[] args) { try { // 获取连接 Connection connection = dataSource.getConnection(); // 创建PreparedStatement对象 String sql = "INSERT INTO users (name, email) VALUES (?, ?)"; PreparedStatement preparedStatement = connection.prepareStatement(sql); // 设置参数 preparedStatement.setString(1, "Jane Doe"); preparedStatement.setString(2, "jane.doe@example.com"); // 执行插入 int rowsAffected = preparedStatement.executeUpdate(); System.out.println("插入成功,影响行数:" + rowsAffected); // 关闭资源 preparedStatement.close(); connection.close(); } catch (SQLException e) { System.out.println("SQL执行失败!"); e.printStackTrace(); } } }
使用ORM框架简化操作
对于复杂的应用,直接使用JDBC可能会比较繁琐,可以使用ORM(Object-Relational Mapping)框架如Hibernate、MyBatis等来简化数据库操作,这些框架可以将Java对象映射到数据库表,并提供更高级的功能如懒加载、缓存等。
示例代码(使用Hibernate):
import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateExample { public static void main(String[] args) { // 创建SessionFactory SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); // 获取Session Session session = sessionFactory.openSession(); session.beginTransaction(); // 创建实体对象 User user = new User(); user.setName("Alice"); user.setEmail("alice@example.com"); // 保存对象 session.save(user); // 提交事务 session.getTransaction().commit(); // 关闭Session session.close(); sessionFactory.close(); } }
常见问题及解决方案
Q1: 如何解决ClassNotFoundException?
A1: 这个异常通常是因为缺少数据库驱动,确保你已经正确添加了数据库驱动的JAR文件到项目的类路径中,或者在Maven项目中正确配置了依赖。
Q2: 如何处理SQL载入攻破?
A2: SQL载入攻破通常发生在直接拼接用户输入到SQL语句中,为了防止SQL载入,应该使用PreparedStatement来预编译SQL语句,并将用户输入作为参数传递,而不是直接拼接到SQL字符串中。