关于存储过程,我的理解如下:存储过程是一些完成特定功能的SQL语句集,存储在数据库中,如需调用,须指定其名字并给出参数。java中提供了一个接口java.sql.CallableStatement,其继承PreparedStatement, Statement接口,这个接口是用于执行SQL存储过程的接口。可用Connection.prepareCall(sql)方法实例化,这个方法中字符串参数格式是:有参数无返回格式{call 过程名[(?, ?, ...)]} ;有参数有返回格式{? = call 过程名[(?, ?, ...)]} ,参数编号从1开始。CallableStatement.registerOutParameter()方法可以按顺序位置将 OUT 参数注册为 JDBC 类型 sqlType。可以通过setXXX()传递参数。然后执行CallableStatement.execute()方法,再通过CallableStatement.getXXX()得到返回值。
简单调用示例如下:
Oracle设计表与存储过程如下:
create table users(
name varchar(50) primary key,
password varchar(50) not null
);
create or replace procedure findUser
(userName in varchar2,uname out varchar2)
is
begin
select name into uname from users where name = userName;
exception
when no_data_found
then uname:='null';
end findUser;
create or replace procedure insertUser
(userName in varchar2, pwd in varchar2)
is
begin
insert into users(name,password) values(userName,pwd);
end insertUser;
create or replace procedure findByUser
(userName in varchar2,upassword in varchar2 ,uname out varchar2)
is
begin
select name into uname from users where name=userName and password=upassword;
exception
when no_data_found
then uname:='null';
end findByUser;
java中调用方法如下:
public String findByUserName(String name) {
Connection con = null;
CallableStatement cs = null;
String flag=null;
con=Util.getConnection();
try {
cs=con.prepareCall("{call findUser(?,?)}");
cs.registerOutParameter(2, Types.VARCHAR);
cs.setString(1, name);
cs.execute();
flag=cs.getString(2);
} catch (SQLException e) {
System.out.println("出现SQLException !");
e.printStackTrace();
}finally{
Util.closeStatement(cs);
Util.closeConnection(con);
}
return flag;
}
public void insertUser(User user) {
Connection con = null;
CallableStatement cs = null;
con=Util.getConnection();
try {
cs=con.prepareCall("{call insertUser(?,?)}");
cs.setString(1, user.getName());
cs.setString(2, user.getPassword());
cs.execute();
} catch (SQLException e) {
System.out.println("出现SQLException !");
e.printStackTrace();
}finally{
Util.closeStatement(cs);
Util.closeConnection(con);
}
}
public String findByUser(User user) {
Connection con = null;
CallableStatement cs = null;
String flag=null;
con=Util.getConnection();
try {
cs=con.prepareCall("{call findByUser(?,?,?)}");
cs.registerOutParameter(3, Types.VARCHAR);
cs.setString(1, user.getName());
cs.setString(2, user.getPassword());
cs.execute();
flag=cs.getString(3);
} catch (SQLException e) {
System.out.println("出现SQLException !");
e.printStackTrace();
}finally{
Util.closeStatement(cs);
Util.closeConnection(con);
}
return flag;
}
下面的first.rar文件时我的一个登录注册应用,里面有调用存储过程的全部代码
分享到:
相关推荐
#### 三、编写存储过程调用 WebService ##### 3.1 创建 WebService 类型的扩展存储过程 在 SQL Server 中,可以通过创建一个扩展存储过程来调用 Web Service。具体步骤如下: 1. **定义 WebService 类型**:首先...
### 存储过程调用详解 #### 一、目的与要求 存储过程是数据库中预编译好的SQL脚本,可以提高数据处理效率并增强安全性。本次内容的主要目的是让学习者能够熟练掌握如何创建、调用及删除存储过程,并通过实践加深对...
总结,搭建Hibernate环境并进行存储过程调用是Java后端开发中的重要技能。理解并掌握这些知识,能够帮助开发者高效地进行数据库操作,提升开发效率。在实际项目中,可以根据需求调整配置和实现方式,以适应不同的...
本话题将详细探讨如何在Oracle存储过程中调用外部的批处理脚本,如Windows系统的BAT文件,以实现数据库操作与系统命令的集成。 首先,`Oracle存储过程`是一种预编译的SQL和PL/SQL代码集合,可以被多次调用以执行...
本文将围绕“存储过程调用Java程序”这一主题,探讨如何在数据库层与应用层之间进行交互。 首先,理解存储过程调用Java程序的基本原理是至关重要的。这通常通过以下两种方式实现: 1. **Java调用存储过程**:在...
总之,Sybase数据库支持通过存储过程调用外部Java程序,提供了一种灵活的方式来实现数据库中的复杂计算和任务调度。正确配置数据库环境,导入Java类,创建适当的SQL包装器,是实现这一功能的关键步骤。理解JNI调用...
3. 活字格中的存储过程调用: 活字格是一款可视化开发工具,它支持调用MySQL和SQL Server的存储过程。要调用存储过程,首先确保已经正确连接到数据库,并且数据库中存在相应的存储过程。以下是活字格中调用存储过程...
JDBC存储过程调用示例,详细描述了存储过程调用的过程。
VB.net无限制参数的存储过程调用,可传入无限个参数的存储过程的类。
VB.NET 操作 Oracle 数据库增删改查以及存储过程调用 在本篇文章中,我们将详细介绍如何使用 VB.NET 操作 Oracle 数据库,包括增删改查操作以及存储过程的调用。 VB.NET 操作 Oracle 数据库的准备工作 在开始操作...
在本例中,Blazeds将用于展示存储过程调用后返回的结果集,提供用户友好的界面展示。 具体实现步骤如下: 1. **配置Spring**:在Spring的配置文件中,我们需要声明一个DataSource,用于连接数据库,并配置...
### 扩展存储过程调用失败126找不到指定模块等问题处理 在SQL Server数据库管理过程中,有时会遇到扩展存储过程调用失败的情况,错误代码为126,提示“找不到指定模块”。这类问题通常与扩展存储过程被非法篡改有关...
创建存储过程: ALTER PROCEDURE [dbo].[GetCustomers] (@rowcount INT OUTPUT) AS SELECT [CustomerID] ,[CompanyName] ,[ContactName] ,[ContactTitle] ,[Address] ,[City] ,[Region] ,[PostalCode] ,...
基于上述原理,可以在C#编程语言中设计一个专门用于执行存储过程调用的类,例如名为AutoCallProcedure的类。此类的实现可以帮助开发者以更灵活和自动化的方式调用存储过程。 以下是AutoCallProcedure类的基本定义和...
### Ibatis调用存储过程详解 #### 一、引言 在实际的软件开发过程中,存储过程因其执行效率高及数据库级别的安全性等优点被广泛应用于各种业务场景之中。而对于使用Ibatis作为持久层框架的应用来说,如何有效地...
### SQL存储过程调用动态链接库 #### 一、动态链接库(DLL)简介 动态链接库(Dynamic Link Library,简称DLL)是Windows系统中的一种共享库文件格式,它允许程序在运行时加载并访问其功能。DLL 文件包含了可由多...
MySQL存储过程调用显示图片源码(C#)是将数据库中的二进制图像数据通过C#编程语言处理并展示在应用程序中的技术实现。这个过程涉及到了数据库操作、数据类型转换以及用户界面显示等多个方面。以下将详细介绍这个主题...
能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来...只根据输入不同的存储过程名称、参数内容,自动调用不同的存储过程。 已经使用在多个项目中 全开源项目 请放心下载
在数据库管理中,存储过程(Stored Procedure)是一种预编译的SQL代码集合,它封装了特定的数据库操作,可以被多次调用,提高了代码的复用性和执行效率。存储过程在IT领域扮演着重要的角色,尤其在数据处理、业务...