通过jdbc调用存储过程
有进要通过jdbc调用存储过程,来说一下怎样来实现?
在我见过的有两种情况:
1)返回一个结果集(ResultSet)。
2)返回一个特定的值。
下面来详细的说明。
1)返回一个结果集(ResultSet),这种类似通常的处理结果集
如果事先就有一个类似如下的procedure
CREATE PROCEDURE getShipQuantity @jsid int AS
SELECT jf_js_id,SUM(jf_ship_quantity) AS shipqty
FROM tjobsheet_finish f WHERE (jf_js_id=@jsid)
GROUP BY jf_js_id
那么我们将通过如下的代码来调用
String sql = "{ call getShipQuantity(?) }";
Connection con = getSession().connection();//通过hibernate得到的连接
ResultSet rs = null;
BigDecimal shipQuantity = new BigDecimal(0);
try{
CallableStatement cs = con.prepareCall(sql);
cs.setInt(1,jsoId);//设置输入参数
rs = cs.executeQuery();//返回结果集
if(rs.next()){
shipQuantity = new BigDecimal(rs.getDouble(2));
}
logger.debug("shipQuantity --------------------- "+shipQuantity);
}catch(Exception e){
logger.debug(e);
}
2)返回一个特定的值。也就是说,在procedure的定义中已经用output输出参数了。请看下面的proceduer
create procedure getSingleWgt @@singleWgt numeric(8,3) output,@jsnum varchar(11) = '0000-0480'
as
declare @stwgt numeric(8,3)
select @stwgt = sum(b.stwgt)
from js as a
inner join jsactdtl as b
on a.jsnum = b.jsnum
where a.completion = 1
and b.stflag = 22
and a.jsnum = @jsnum
select @@singleWgt = (@stwgt/orderedqty) from js where jsnum = @jsnum
那么我们将通过如下的代码来调用
String sql = "{ call getSingleWgt(?,?) }";
Connection con = getSession().connection();//得到connection
try{
CallableStatement cs = con.prepareCall(sql);//通过它来执行sql
cs.registerOutParameter(1,java.sql.Types.FLOAT);//注册输出参数
cs.setString(2,shipment.getJsnum());//指出输入参数
if(cs.execute()){//执行
float output = cs.getFloat(1);//返回值
}
}catch(Exception e){
logger.debug(e);
}
分享到:
相关推荐
这个"jdbc针对存储过程通用的jdbc封装.zip"文件很可能包含了一个Java库或示例代码,它对JDBC进行了封装,以简化调用数据库存储过程的过程。存储过程是预编译的SQL语句集合,它们在数据库服务器上执行,提供了性能...
使用jdbc调用存储过程的代码示例 调用数据库连接池
- **CallableStatement接口**:用于执行存储过程。 - **ResultSet接口**:表示查询结果集,通常是一个只读、向前滚动的游标。 - **DatabaseMetaData接口**:提供有关数据库的信息,如支持的数据类型、系统函数等。 -...
标题中的“jdbc连接例子 Oracle CLOB转换为String java调用存储过程之输出游标”涉及到三个主要的Java数据库编程知识点:JDBC连接、Oracle数据库中的CLOB类型处理以及通过Java调用存储过程处理输出游标。 1. JDBC...
总结来说,从Java存储过程返回JDBC ResultSet作为REF CURSOR,主要是为了解决Oracle数据库的特性和JDBC的兼容问题。通过Oracle9i引入的特性,开发者可以利用这种方法在PL/SQL和Java之间更灵活地交换数据。然而,这种...
### Groovy将JDBC中Oracle存储过程游标转换为多层JSON 在本文档中,我们将探讨如何使用Groovy脚本结合JDBC技术从Oracle存储过程中获取数据,并将其转换为多层JSON格式。该方法特别适用于需要从XML输入中提取数据并...
描述中的“jaar包”可能是笔误,通常我们说的是"jar"包,它是Java Archive的缩写,是一种用于存储Java类文件、资源文件以及元数据的文件格式。"要的请抢先"可能意味着这个驱动在某些场景下是必需的,或者比较稀缺。 ...
1. **JdbcTemplate**:这是Spring JDBC的核心类,它通过模板方法模式将常见的JDBC操作进行了封装,如执行SQL查询、更新、调用存储过程等。开发者只需要关注SQL语句和参数,而无需处理连接创建、关闭、异常处理等繁琐...
在Java应用程序中,可以通过Java Database Connectivity (JDBC) API来调用MySQL的存储过程。 首先,确保你已经安装了MySQL数据库,并且在数据库中创建了一个或多个存储过程。例如,`findAllBook`、`pro_test`和`pro...
Oracle12C JDBC驱动还支持高级特性,如分布式事务处理、批量操作、预编译的SQL语句、游标、存储过程调用、连接池管理等。此外,通过`oracle.jdbc.pool.OracleDataSource` 类可以实现连接池功能,如使用Oracle的...
1. **JdbcTemplate**:这是Spring JDBC的基础组件,它通过模板方法模式封装了常见的JDBC操作,如执行SQL查询、更新、存储过程等。使用JdbcTemplate,开发者无需手动管理数据库连接、预编译语句、结果集转换等细节,...
- **CallableStatement**:用于访问数据库中的存储过程,提供了一些方法来指定语句所使用的输入/输出参数。 - **ResultSet**:查询返回的数据库结果集。 - **ResultSetMetaData**:用于获取关于ResultSet对象中列...
6. 支持SQLServer的高级特性,如XML类型、游标、存储过程等。 总结,sqljdbc41.jar作为SQLServer的JDBC驱动,是Java开发者与SQLServer数据库交互的重要桥梁。理解其工作原理和使用方法,能有效提升数据库操作的效率...
使用SQL Server JDBC驱动,开发者可以在Java应用程序中执行SQL Server的查询、存储过程等操作。 2. Oracle JDBC驱动: Oracle提供了两种主要的JDBC驱动: Thin驱动和OCI驱动。 Thin驱动(也称为Type 4)是纯Java...
使用Hive1.10 JDBC包的过程大致如下: 1. **下载与安装**:首先,你需要下载Hive1.10的JDBC驱动,这通常是一个jar文件,如描述中提到的"1.1.0"可能就是这个驱动的版本号。 2. **配置环境**:将下载的JDBC驱动添加...
标题中的“开源的access jdbc驱动”指的是一个名为UCanAccess...在实际应用中,开发者可以利用UCanAccess执行SQL查询、事务处理、存储过程,以及进行各种数据库管理任务,从而高效地处理和管理基于Access的数据库系统。
2. **Geotools的JDBC数据存储(DataStore)**: Geotools提供了DataStore接口,它是访问各种数据源(如Oracle数据库)的抽象层。通过这个接口,开发者可以轻松地读取、写入和更新空间数据。 3. **Spatial SQL**: ...
* ResultSet:用于存储查询结果的对象。 jdbc 的作用图: jdbc 的作用图是指 jdbc 在 Java 程序和数据库之间的中间件角色,负责将 Java 程序的请求转换为数据库可以理解的 SQL 语句,并将数据库的响应结果返回给 ...