使用 Java 执行 SQL 语句和存储过程

server/2025/3/11 5:19:39/

使用 Java 执行 SQL 语句和存储过程,通常有两种主要的方式:使用 JDBC(Java Database Connectivity)或者通过框架如 Spring Data JPA、MyBatis 等。

1. 使用 JDBC 执行 SQL 语句

JDBC 是 Java 操作数据库的标准 API。以下是通过 JDBC 执行 SQL 语句的基本步骤:

  1. 加载数据库驱动程序。
  2. 获取数据库连接。
  3. 创建 StatementPreparedStatement 对象。
  4. 执行 SQL 语句。
  5. 处理查询结果(如果有)。
  6. 关闭资源。

示例代码:执行普通的 SQL 查询

java">import java.sql.*;public class JdbcExample {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/your_database";String user = "root";String password = "your_password";Connection conn = null;Statement stmt = null;ResultSet rs = null;try {// 1. 加载 JDBC 驱动程序Class.forName("com.mysql.cj.jdbc.Driver");// 2. 获取数据库连接conn = DriverManager.getConnection(url, user, password);// 3. 创建 Statement 对象stmt = conn.createStatement();// 4. 执行 SQL 查询String sql = "SELECT * FROM your_table";rs = stmt.executeQuery(sql);// 5. 处理查询结果while (rs.next()) {int id = rs.getInt("id");String name = rs.getString("name");System.out.println("ID: " + id + ", Name: " + name);}} catch (SQLException | ClassNotFoundException e) {e.printStackTrace();} finally {// 6. 关闭资源try {if (rs != null) rs.close();if (stmt != null) stmt.close();if (conn != null) conn.close();} catch (SQLException e) {e.printStackTrace();}}}
}

2. 使用 JDBC 执行存储过程

存储过程是预编译的 SQL 代码,可以被数据库直接调用。通过 JDBC 调用存储过程的步骤和执行普通 SQL 类似,但需要使用 CallableStatement 对象。

步骤:

  1. 加载数据库驱动程序。
  2. 获取数据库连接。
  3. 创建 CallableStatement 对象,传入存储过程的 SQL 语句。
  4. 设置存储过程的参数。
  5. 执行存储过程。
  6. 获取存储过程的输出结果。
  7. 关闭资源。

示例代码:调用存储过程

假设有一个存储过程如下:

sql">CREATE PROCEDURE getEmployeeInfo(IN emp_id INT)
BEGINSELECT * FROM employees WHERE id = emp_id;
END

Java 代码如下:

java">import java.sql.*;public class JdbcStoredProcedureExample {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/your_database";String user = "root";String password = "your_password";Connection conn = null;CallableStatement stmt = null;ResultSet rs = null;try {// 1. 加载 JDBC 驱动程序Class.forName("com.mysql.cj.jdbc.Driver");// 2. 获取数据库连接conn = DriverManager.getConnection(url, user, password);// 3. 创建 CallableStatement 对象,调用存储过程String sql = "{CALL getEmployeeInfo(?)}";stmt = conn.prepareCall(sql);// 4. 设置存储过程的输入参数stmt.setInt(1, 123);  // 假设查询员工 ID 为 123 的员工信息// 5. 执行存储过程rs = stmt.executeQuery();// 6. 获取存储过程的结果while (rs.next()) {int id = rs.getInt("id");String name = rs.getString("name");System.out.println("ID: " + id + ", Name: " + name);}} catch (SQLException | ClassNotFoundException e) {e.printStackTrace();} finally {// 7. 关闭资源try {if (rs != null) rs.close();if (stmt != null) stmt.close();if (conn != null) conn.close();} catch (SQLException e) {e.printStackTrace();}}}
}

3. 使用 Spring JDBC 执行 SQL 语句

如果你使用 Spring 框架,可以通过 Spring 的 JDBC 模板简化操作。Spring JDBC 模板提供了更高级的封装,使得执行 SQL 操作更加简洁。

示例代码:使用 Spring JDBC 模板执行 SQL 查询

java">import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;public class SpringJdbcExample {public static void main(String[] args) {// 设置数据源DriverManagerDataSource dataSource = new DriverManagerDataSource();dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");dataSource.setUrl("jdbc:mysql://localhost:3306/your_database");dataSource.setUsername("root");dataSource.setPassword("your_password");// 创建 JdbcTemplate 对象JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);// 执行查询String sql = "SELECT * FROM your_table";jdbcTemplate.query(sql, (rs, rowNum) -> {int id = rs.getInt("id");String name = rs.getString("name");System.out.println("ID: " + id + ", Name: " + name);return null;});}
}

4. 使用 Spring JDBC 执行存储过程

Spring 也支持执行存储过程,可以通过 JdbcTemplateSimpleJdbcCall 类来实现。

示例代码:使用 Spring 执行存储过程

java">import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;
import org.springframework.jdbc.datasource.DriverManagerDataSource;import java.sql.Types;public class SpringStoredProcedureExample {public static void main(String[] args) {// 设置数据源DriverManagerDataSource dataSource = new DriverManagerDataSource();dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");dataSource.setUrl("jdbc:mysql://localhost:3306/your_database");dataSource.setUsername("root");dataSource.setPassword("your_password");// 创建 SimpleJdbcCall 对象SimpleJdbcCall jdbcCall = new SimpleJdbcCall(dataSource).withProcedureName("getEmployeeInfo")  // 存储过程名.declareParameters(new SqlParameter("emp_id", Types.INTEGER));// 执行存储过程jdbcCall.execute(123);  // 假设查询员工 ID 为 123 的信息}
}

总结

  • JDBC:最基础的数据库操作方法,适合不使用任何框架时。
  • Spring JDBC:适合在 Spring 框架下使用,简化了数据库操作并处理了许多细节。
  • 存储过程:可以通过 CallableStatement 执行存储过程,存储过程本身由数据库管理,能够提高性能。

http://www.ppmy.cn/server/174102.html

相关文章

雷池WAF的为什么选择基于Docker

Docker 是一种开源的容器化平台,可以帮助开发人员将应用程序及其所有依赖项打包到一个称为容器的独立、可移植的环境中。Docker 的核心概念包括以下几点: 容器:Docker 使用容器来封装应用程序及其依赖项,使其能够在任何环境中都能…

clickhouse修改和删除数据

标题:ClickHouse中修改和删除数据的简易指南 在大数据时代,数据库技术的发展日新月异。作为一款专为实时分析设计的列式数据库管理系统,ClickHouse因其高效的查询性能而受到欢迎。照这么推测的话,对于那些习惯于传统SQL操作&…

Collections.addAll与List实例对象addAll方法的比较

Collections.addAll() 和 List.addAll() 都是用于将多个元素添加到集合中的方法,但它们在实现和使用上有一些区别。以下是它们的详细对比: 1. Collections.addAll() Collections.addAll() 是 java.util.Collections 类中的一个静态方法,用于…

【GPT入门】第9课 思维树概念与原理

【GPT入门】第9课 思维树概念与原理 1.思维树概念与原理2. 算24游戏的方法 1.思维树概念与原理 思维树(Tree of Thought,ToT )是一种大模型推理框架,旨在解决更加复杂的多步骤推理任务,让大模型能够探索多种可能的解决…

RPA 职业前景:个人职场发展的 “新机遇”

1. RPA职业定义与范畴 1.1 RPA核心概念 机器人流程自动化(RPA)是一种通过软件机器人模拟人类操作,自动执行重复性、规则性任务的技术。RPA的核心在于其能够高效、准确地处理大量数据和流程,减少人工干预,从而提高工作…

【单片机】ARM 处理器简介

ARM 公司简介 ARM(Advanced RISC Machine) 是英国 ARM 公司(原 Acorn RISC Machine) 开发的一种精简指令集(RISC) 处理器架构。ARM 处理器因其低功耗、高性能、广泛适用性,成为嵌入式系统、移动…

单例模式:确保一个类只有一个实例

目录 引言 1. 单例模式的核心思想 2. 单例模式的实现方式 2.1 饿汉式单例 2.2 懒汉式单例 2.3 线程安全的懒汉式单例 2.4 双重检查锁定(Double-Checked Locking) 2.5 静态内部类实现单例 2.6 枚举实现单例 3. 单例模式的使用场景 4. 单例模式…

Vue 系列之:Vuex 和 Pinia

前言 每一个 Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state)。Vuex 和单纯的全局对象有以下两点不同: Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时…