Java调用数据库存储过程示例

需积分: 9 1 下载量 17 浏览量 更新于2024-09-19 收藏 6KB TXT 举报
"Java 调用存储过程是数据库操作中的常见任务,特别是在需要执行复杂业务逻辑时。本文将详细讲解如何使用Java通过JDBC来调用Oracle和SQL Server等数据库的存储过程。 首先,存储过程是数据库中预编译的一组SQL语句,它可以包含多个SQL操作和控制流程结构,常用于执行复杂的数据库操作。例如,创建一个名为`ADDDEPT`的Oracle存储过程: ```sql CREATE OR REPLACE PROCEDURE ADDDEPT ( DEPTNO NUMBER, DNAME VARCHAR2, LOC VARCHAR2 ) AS BEGIN INSERT INTO DEPT (DEPTNO, DNAME, LOC) VALUES (DEPTNO, DNAME, LOC); END; ``` 这个存储过程接受三个参数,用于插入新的部门记录。 在Java中,我们使用Java Database Connectivity (JDBC) API来调用存储过程。以下是一个Java示例,演示了如何连接到Oracle数据库并调用上述`ADDDEPT`存储过程: ```java public class TestProcedure { Connection conn = null; CallableStatement cstmt = null; PreparedStatement pstmt = null; String url = "jdbc:oracle:thin:@localhost:1521:mydb"; String driver = "oracle.jdbc.driver.OracleDriver"; String username = ""; // 填写你的数据库用户名 String password = ""; // 填写你的数据库密码 public TestProcedure() { try { Class.forName(driver); conn = DriverManager.getConnection(url, username, password); cstmt = conn.prepareCall("{call adddept(?,?,?)}"); cstmt.setInt(1, 13); // 设置部门编号参数 cstmt.setString(2, "2"); // 设置部门名称参数 cstmt.setString(3, "ningbo2"); // 设置部门地点参数 cstmt.executeUpdate(); System.out.println("success"); } catch (Exception e) { e.printStackTrace(); } finally { cstmt.close(); conn.close(); } } } ``` 在这个例子中,`prepareCall`方法用于创建一个`CallableStatement`对象,`{call adddept(?,?,?)}`是调用存储过程的语法格式,参数位置由问号表示。然后,我们使用`setInt`和`setString`方法设置参数值,并通过`executeUpdate`执行存储过程。 对于SQL Server,虽然调用方式类似,但语法稍有不同。例如,如果你有一个名为`TESTB`的存储过程,接收一个输入参数和一个输出参数: ```sql CREATE OR REPLACE PROCEDURE TESTB ( PARA1 VARCHAR2, PARA2 OUT VARCHAR2 ) AS BEGIN SELECT PARA2 INTO PARA2 FROM TESTTB WHERE I_ID = PARA1; END TESTB; ``` 在Java中,你需要使用`registerOutParameter`来声明输出参数,如下所示: ```java public class TestProcedureTWO { // ... 省略连接信息和构造函数 public void callTestBProcedure(String para1) { try { cstmt = conn.prepareCall("{call TESTB (?, ?)}"); cstmt.setString(1, para1); cstmt.registerOutParameter(2, java.sql.Types.VARCHAR); cstmt.execute(); String result = cstmt.getString(2); System.out.println("Output parameter value: " + result); } catch (Exception e) { e.printStackTrace(); } finally { // ... 关闭资源 } } } ``` 在这个例子中,`registerOutParameter`指定第二个参数为输出类型,然后通过`getString`方法获取输出参数的值。 Java调用存储过程主要涉及以下几个步骤: 1. 加载数据库驱动并建立连接。 2. 创建`CallableStatement`对象。 3. 使用`setXXX`方法设置输入参数。 4. 如果有输出参数,使用`registerOutParameter`声明。 5. 执行`execute`或`executeUpdate`方法。 6. 获取结果,处理输出参数(如有)。 7. 清理资源,关闭连接。 理解这些基本概念和步骤,你就可以根据实际需求灵活地在Java中调用各种数据库的存储过程了。"