今天说一说用在JDBC中调用存储过程,本次讲解为初级篇采用的数据库为SQLSERVER,根据需要还会发布相应的高级篇。
一、建立实例数据库
描述:创建两张表,一个学生信息表(stuinfo),另一个是学生成绩表(stuMarks),在这两张表中分别插入学生信息
并设置stuinfo为主键表,stuMarks为外键表。创建一个存储过程查询本班没有通过考试的学员人数(可适当将未及格学员的信息打印出来)。
建表:
use stuDB
go
if exists(select * from sysobjects where name='stuinfo')
truncate table stuinfo
create table stuinfo(
stuName varchar(20) not null,
stuNo char(6) not null,
stuAge int not null,
stuID numeric(18, 0),
stuSeat smallint identity(1, 1),
stuAddress text
)
go
if exists(select * from sysobjects where name='stuMarks')
truncate table stuMarks
create table stuMarks(
ExamNo char(7) not null,
stuNo char(6) not null,
writtenExam int not null,
LabExam int not null
)
插入数据:
alter table stuMarks
add constraint FK_stuNo
foreign key(stuNo) references stuInfo(stuNo)
on delete cascade
insert into stuinfo values('张秋丽', 's25301', 18,123876493217894538, '北京海淀区');
insert into stuinfo values('李文才', 's25302', 28,348907621874635832, '地址不详');
insert into stuinfo values('李斯文', 's25303', 22,371409823723841987, '河南洛阳');
insert into stuinfo values('欧阳峻峰', 's25304',34, 238651097452691873, '地址不详');
insert into stuinfo values('梅超风', 's25318', 23,371893123876453221, '地址不详');
insert into stuMarks values('s271811', 's25303', 80, 58)
insert into stuMarks values('s271813', 's25302', 50, 90)
insert into stuMarks values('s271816', 's25301', 77, 82)
insert into stuMarks values('s271818', 's25318', 45, 65)
insert into stuMarks values('s271819', 's25304', 60, 60)
创建存储过程:
if exists(select * from sysobjects where name='pro_stufout')
drop procedure pro_stufout
go
create procedure pro_stufout
@notpassSum int output,
@writtenPass int=60,
@labPass int=60
as
print '------------------------------------------------------'
print ' 参加本次考试没有通过的学员是:'
select stuName, stuinfo.stuNo, writtenExam, labExam from stuinfo inner join stuMarks on stuinfo.stuNo = stuMarks.stuNo
where writtenExam < @writtenPass or labExam < @labPass
return select @notpassSum=count(stuNo) from stuMarks
where writtenExam < @writtenPass or labExam < @labPass
go
二、JDBC调用存储过程
- 无参调用
- 带参数调用(包括输出参数和输入参数)
- 方法调用
以带参数的方法调用为例:
public int executeProcedure(){
int returnValue = 0;
CallableStatement call = null;
Connection conn = SQLConnection.getSQLConnection("qdaoStuDB");
try {
call = conn.prepareCall("{?=call pro_stufout(?, ?)}");
call.setInt(3, 60);
call.registerOutParameter(1, java.sql.Types.INTEGER);
call.registerOutParameter(2, java.sql.Types.INTEGER);
ResultSet rs = call.executeQuery();
while(rs.next()){
System.out.println(rs.getString(1));
}
// call.execute();
// System.out.println(b);
returnValue = call.getInt(1);
System.out.println("----" + returnValue);
System.out.println("@@@@@" + call.getInt(2));
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return returnValue;
}
输出结果:
张秋丽
李文才
欧阳俊雄
----3
@@@@@3
后续章节待续。
分享到:
相关推荐
在给出的“简单的存储过程.txt”文件中,可能包含了一个示例存储过程的定义和如何通过JDBC调用它的Java代码。例如,一个存储过程可能用于插入数据: ```sql CREATE OR REPLACE PROCEDURE insert_user ( p_username...
本文将详细讲解如何使用JDBC调用MySQL5的存储过程,包括存储过程的创建、JDBC调用过程以及处理输入输出参数。 首先,我们创建一个简单的MySQL5数据库表`user`,用于演示存储过程的插入操作: ```sql CREATE TABLE ...
针对java调用存储过程写的通用封装,oracle,mssql测试通过,附带测试脚本.以前写过一个,感觉不是很好,这个周末就重写了一个,大家多多提意见,是eclipse工程直接跑junit就行了,所有的...除了存储过程也可以执行简单的sql.
` 是占位符,它们的顺序对应于存储过程中的参数顺序。`registerOutParameter` 方法用于指定返回参数的数据类型。 注意,对于存储过程的输入参数,你可以使用`setXXX`方法,其中`XXX`对应于Java的数据类型,如`set...
在存储过程中,做简单动态查询需要使用 EXECUTE IMMEDIATE 语句或 DBMS_SQL 包来执行动态 SQL 语句。 Oracle 存储过程学习目录是学习 Oracle 存储过程的基础知识,了解 Oracle 存储过程的基本语法、基础知识和一些...
标题中的“Spring+Jdbc scott用户的调用存储过程”涉及到的是在Java开发中使用Spring框架的JDBC模块来调用数据库的存储过程。在Java应用程序中,Spring JDBC提供了一个简单且有效的方式来处理数据库交互,包括执行...
这些方法用于获取存储过程中 OUT 参数的值。 **3. 函数与存储过程的区别** - **调用语法**: - 存储过程:`{call (, , ...)}` - 函数:`{?= call (, , ...)}` 其中问号是一个占位符,表示返回值的位置。 - *...
`说明.txt`文件提供了对这些存储过程的使用指南,可能包括如何通过SQL*Plus或应用程序接口(如Java的JDBC)调用它们,以及如何传递参数、处理返回结果等。在实际应用中,理解这些步骤至关重要,因为它们帮助确保正确...
本文通过示例详细介绍了如何在Java中使用Oracle存储过程。首先,我们创建了一个简单的`BOOK`表以及多个不同功能的存储过程。接着,在Java程序中通过`CallableStatement`对象调用了这些存储过程,包括无返回值的存储...
在本文档中,我们将探讨如何使用Groovy脚本结合JDBC技术从Oracle存储过程中获取数据,并将其转换为多层JSON格式。该方法特别适用于需要从XML输入中提取数据并将其转化为JSON输出的应用场景。以下是详细的步骤和技术...
- `OUT`参数类型表示该参数是输出参数,可以用来从存储过程中返回值。 - 使用`SELECT ... INTO ...`语句将查询结果赋值给输出参数。 #### 五、调用带输出参数的存储过程 同样,我们可以通过Java代码来调用这个带有...
2. 输出参数:用于从存储过程中传出数据,可以是各种数据类型。 3. RETURN参数:返回一个整型状态值,用于表示存储过程的执行状态。 4. 游标:某些数据库允许返回游标引用,虽然JDBC不直接支持,但Oracle、...
`OUT`参数是存储过程中的一种特殊参数类型,用于将结果传出存储过程,供调用者使用。 Java中调用存储过程主要通过JDBC(Java Database Connectivity)接口实现。以下是一步步的操作步骤: 1. **加载数据库驱动**:...
6. **Tomcat中的数据源设置**:在Tomcat服务器的配置文件(通常为`context.xml`)中,配置连接Oracle数据库的数据源,注意将`type`属性设置为1,表示使用存储过程。例如: ```xml 数据集别名"> ...
其中`@inputNum`是存储过程中定义的参数名称,`num`是要传递的值。 **步骤4:填充DataTable** 最后使用`SqlDataAdapter`的`Fill`方法将结果集填充到`DataTable`中: ```csharp DataTable dt = new DataTable(); ...
下面是一个简单的示例代码,演示如何在 Java 中调用 Oracle 存储过程: ```java public class TestProcedure { Connection conn=null ; CallableStatement cstmt=null ; PreparedStatement pstmt=null ; String...
总结,通过以上步骤,我们可以使用MyBatis成功地调用Oracle数据库中的存储过程。这使得Java应用程序可以灵活地利用数据库提供的复杂逻辑,同时保持MyBatis的简单易用性。注意,实际应用中可能需要考虑事务管理、异常...
本篇将深入探讨如何在Oracle存储过程中创建并返回一个结果集,并结合Java代码展示如何在应用程序中使用这个结果集。 首先,我们需要理解`OUT`参数的概念。在Oracle存储过程中,`IN`参数用于传递数据到过程,`OUT`...
在Java应用程序中,我们经常使用JDBC(Java Database Connectivity)来调用这些存储过程。下面将详细介绍如何通过JDBC在Java中调用MySQL的存储过程。 首先,确保你已经在MySQL数据库中创建了存储过程。一个简单的...
在Java代码中,我们可以使用JDBC API调用这个存储过程: ```java import java.sql.*; // 创建数据库连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_db", "username", ...