`
- 浏览:
115421 次
- 性别:
- 来自:
北京
-
java 代码
- 一:无返回值的存储过程
- 存储过程为:
-
- CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS
-
- BEGIN
-
- INSERT INTO HYQ.B_ID (I_ID,I_NAME) VALUES (PARA1, PARA2);
-
- END TESTA;
-
- 然后呢,在java里调用时就用下面的代码:
-
- package com.hyq.src;
-
-
-
- import java.sql.*;
-
- import java.sql.ResultSet;
-
-
-
- public class TestProcedureOne {
-
- public TestProcedureOne() {
-
- }
-
- public static void main(String[] args ){
-
- String driver = "oracle.jdbc.driver.OracleDriver";
-
- String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521: hyq ";
-
- Statement stmt = null;
-
- ResultSet rs = null;
-
- Connection conn = null;
-
- CallableStatement cstmt = null;
-
-
-
- try {
-
- Class.forName(driver);
-
- conn = DriverManager.getConnection(strUrl, " hyq ", " hyq ");
-
- CallableStatement proc = null;
-
- proc = conn.prepareCall("{ call HYQ.TESTA(?,?) }");
-
- proc.setString(1, "100");
-
- proc.setString(2, "TestOne");
-
- proc.execute();
-
- }
-
- catch (SQLException ex2) {
-
- ex2.printStackTrace();
-
- }
-
- catch (Exception ex2) {
-
- ex2.printStackTrace();
-
- }
-
- finally{
-
- try {
-
- if(rs != null){
-
- rs.close();
-
- if(stmt!=null){
-
- stmt.close();
-
- }
-
- if(conn!=null){
-
- conn.close();
-
- }
-
- }
-
- }
-
- catch (SQLException ex1) {
-
- }
-
- }
-
- }
-
- }
-
- 当然了,这就先要求要建张表TESTTB,里面两个字段(I_ID,I_NAME)。
-
- 二:有返回值的存储过程(非列表)
-
- 存储过程为:
-
- CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2) AS
-
- BEGIN
-
- SELECT INTO PARA2 FROM TESTTB WHERE I_ID= PARA1;
-
- END TESTB;
-
- 在java里调用时就用下面的代码:
-
- package com.hyq.src;
-
- public class TestProcedureTWO {
-
- public TestProcedureTWO() {
-
- }
-
- public static void main(String[] args ){
-
- String driver = "oracle.jdbc.driver.OracleDriver";
-
- String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521:hyq";
-
- Statement stmt = null;
-
- ResultSet rs = null;
-
- Connection conn = null;
-
- try {
-
- Class.forName(driver);
-
- conn = DriverManager.getConnection(strUrl, " hyq ", " hyq ");
-
- CallableStatement proc = null;
-
- proc = conn.prepareCall("{ call HYQ.TESTB(?,?) }");
-
- proc.setString(1, "100");
-
- proc.registerOutParameter(2, Types.VARCHAR);
-
- proc.execute();
-
- String testPrint = proc.getString(2);
-
- System.out.println("=testPrint=is="+testPrint);
-
- }
-
- catch (SQLException ex2) {
-
- ex2.printStackTrace();
-
- }
-
- catch (Exception ex2) {
-
- ex2.printStackTrace();
-
- }
-
- finally{
-
- try {
-
- if(rs != null){
-
- rs.close();
-
- if(stmt!=null){
-
- stmt.close();
-
- }
-
- if(conn!=null){
-
- conn.close();
-
- }
-
- }
-
- }
-
- catch (SQLException ex1) {
-
- }
-
- }
-
- }
-
- }
-
-
-
- }
-
- 注意,这里的proc.getString(2)中的数值2并非任意的,而是和存储过程中的out列对应的,如果out是在第一个位置,那就是proc.getString(1),如果是第三个位置,就是proc.getString(3),当然也可以同时有多个返回值,那就是再多加几个out参数了。
-
- 三:返回列表
-
- 由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分,
-
- 1, 建一个程序包。如下:
-
- CREATE OR REPLACE PACKAGE TESTPACKAGE AS
-
- TYPE Test_CURSOR IS REF CURSOR;
-
- end TESTPACKAGE;
-
- 2,建立存储过程,存储过程为:
-
- CREATE OR REPLACE PROCEDURE TESTC(p_CURSOR out TESTPACKAGE.Test_CURSOR) IS
-
- BEGIN
-
- OPEN p_CURSOR FOR SELECT * FROM HYQ.TESTTB;
-
- END TESTC;
-
- 可以看到,它是把游标(可以理解为一个指针),作为一个out 参数来返回值的。
-
- 在java里调用时就用下面的代码:
-
- package com.hyq.src;
-
- import java.sql.*;
-
- import java.io.OutputStream;
-
- import java.io.Writer;
-
- import java.sql.PreparedStatement;
-
- import java.sql.ResultSet;
-
- import oracle.jdbc.driver.*;
-
- public class TestProcedureTHREE {
-
- public TestProcedureTHREE() {
-
- }
-
- public static void main(String[] args ){
-
- String driver = "oracle.jdbc.driver.OracleDriver";
-
- String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521:hyq";
-
- Statement stmt = null;
-
- ResultSet rs = null;
-
- Connection conn = null;
-
- try {
-
- Class.forName(driver);
-
- conn = DriverManager.getConnection(strUrl, "hyq", "hyq");
-
- CallableStatement proc = null;
-
- proc = conn.prepareCall("{ call hyq.testc(?) }");
-
- proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);
-
- proc.execute();
-
- rs = (ResultSet)proc.getObject(1);
-
- while(rs.next())
-
- {
-
- System.out.println(" " + rs.getString(1) + " "+rs.getString(2)+"");
-
- }
-
- }
-
- catch (SQLException ex2) {
-
- ex2.printStackTrace();
-
- }
-
- catch (Exception ex2) {
-
- ex2.printStackTrace();
-
- }
-
- finally{
-
- try {
-
- if(rs != null){
-
- rs.close();
-
- if(stmt!=null){
-
- stmt.close();
-
- }
-
- if(conn!=null){
-
- conn.close();
-
- }
-
- }
-
- }
-
- catch (SQLException ex1) {
-
- }
-
- }
-
- }
-
- }
-
- 在这里要注意,在执行前一定要先把oracle的驱动包放到class路径里,否则会报错的。
-
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
本话题将详细讲解如何使用Java调用带有参数的Oracle存储过程,并获取存储过程返回的集合。 首先,Oracle存储过程是一种预编译的SQL语句集合,它可以在数据库服务器端执行,提高性能,减少网络传输。`PROCEDURE.sql`...
### Java调用存储过程——传入集合参数:深入解析与实践 #### 核心知识点概览 在Java应用中,调用数据库存储过程时,往往需要处理复杂的参数传递,特别是当参数为集合类型时,这一过程变得更加具有挑战性。本文将...
总结来说,Java调用存储过程并处理返回数组,需要理解存储过程的定义,正确使用`CallableStatement`或其子类如`OracleCallableStatement`,以及处理Oracle特定数据类型的方法。通过这些技巧,我们可以有效地在Java...
System.out.println("存储过程返回的OUT参数值:" + outValue); cs.close(); conn.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 在这个例子中,`my_procedure`是存储过程名,`123`是...
### 二、调用存储过程返回单个值的步骤 #### 2.1 准备工作 首先,确保已正确配置数据库连接。这通常涉及到以下几点: - 加载合适的JDBC驱动程序。 - 建立到数据库的连接。 #### 2.2 创建存储过程 假设我们有一个名...
这个例子展示了如何调用名为`sp_getCustomerById`的存储过程,该过程接收一个整数ID作为参数,并返回匹配的客户信息。 8. **事务管理** 如果存储过程涉及多个数据库操作,可能需要考虑事务管理。使用`Connection....
本篇文章将深入探讨如何使用Java与MySQL数据库进行交互,实现调用存储过程,并提供一个测试通过的实例。 首先,理解存储过程是数据库管理系统提供的一种预编译的SQL语句集合,它封装了特定的功能,可以提高执行效率...
如果存储过程返回游标,我们需要声明一个`OUT`参数来接收。 4. **执行存储过程**:通过`pstmt.execute()`执行存储过程。这将打开一个游标,我们可以从游标中获取结果。 5. **处理游标结果**:使用`...
首先,确保你已经安装了MySQL数据库,并且在数据库中创建了一个或多个存储过程。例如,`findAllBook`、`pro_test`和`pro_user`都是在`book`数据库中的存储过程。你可以使用MySQL命令行客户端或者可视化工具(如MySQL...
Java调用存储过程是数据库操作中的常见任务,特别是在复杂业务逻辑和数据处理中。存储过程是一种预编译的SQL语句集合,可以在数据库服务器端执行,提高了效率并减少了网络通信量。本文将详细讲解Java如何调用存储...
总之,Java调用MySQL存储过程是一个涉及JDBC、CallableStatement和数据库交互的过程。理解这些步骤并正确地应用它们,可以有效地利用存储过程提高应用程序的性能和效率。记得在实际开发中,根据实际情况调整代码,...
总的来说,Java调用存储过程是数据库交互的一个重要环节,理解其原理和操作流程对于开发高效、可靠的数据库应用至关重要。在实际项目中,根据具体需求选择合适的设计策略,既能保证功能实现,又能兼顾性能和维护性。
Java调用Oracle分页存储过程是一项常见的数据库操作,尤其在处理大数据量时,为了提高查询效率和用户体验,分页查询显得尤为重要。Oracle数据库提供了一种高效的方法,即通过创建存储过程来实现分页功能,而Java作为...
`Procedure.java`文件可能是实现了上述步骤的一个Java类示例,而`Java.jpg`可能是一个关于Java调用存储过程的流程图或者代码截图,用于辅助理解和学习。在开发过程中,结合这些资源可以更好地理解和实践Java调用存储...
以一个简单的例子展示Java调用存储过程: ```java import java.sql.*; public class CallProcedure { public static void main(String[] args) { try { Connection conn = DriverManager.getConnection("jdbc:...
#### 四、Java调用存储过程 下面通过两个Java类来演示如何调用上面创建的存储过程。 ##### 4.1 调用 `ADDDEPT` 存储过程 ```java public class TestProcedure { Connection conn = null; CallableStatement ...
此外,对于更复杂的情况,比如存储过程返回多结果集,可能需要使用`ResultSetMetaData`来获取列信息,然后遍历结果集。 参考上述步骤,你可以根据自己的需求修改并实现调用Oracle存储过程的Java代码。确保正确配置...
- 如果存储过程返回一个游标(CURSOR),可以将其注册为`OUT`参数。例如,`registerOutParameter(index, OracleTypes.CURSOR)`。 - 执行存储过程后,通过`CallableStatement.getObject(index)`获取游标对象,然后...