如何使用 JDBC 调用存储在数据库中的函数或存储过程

JDBC调用存储过程
步骤:
1 通过Connection对象的prepareCall()方法创建一个CallableStatement对象的实例。在使用Connection对象的prepareCall()方法时,需要传入一个String类型的字符串,该字符串用于指明如何调用存储过程
{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}
{call <procedure-name>[(<arg1>,<arg2>, ...)]}

2 通过CallableStatement对象的registerOutParameter()方法注册OUT参数
3 通过CallableStatement对象的setXxx()方法设定IN或IN OUT参数
若想将参数默认值设为Null,可以使用setNull()方法
4 通过CallableStatement对象的execute()方法执行存储过程
5 如果所调用的是带返回参数的存储过程,还需要通过CallableStatement对象的getXxx()方法获取其返回值
注:通过数据字典查看存储过程或函数的定义

select text from user_source where lower(name)=‘add_fun‘;
调用函数:

package com.atguigu.jdbc;

import static org.junit.Assert.*;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Types;

import javax.sql.DataSource;

import org.junit.Test;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class JDBCTest {

/**
* 如何使用 JDBC 调用存储在数据库中的函数或存储过程
*/
@Test
public void testCallableStatment() {

Connection connection = null;
CallableStatement callableStatement = null;

try {
connection = JDBCTools.getConnection();

// 1. 通过 Connection 对象的 prepareCall()
// 方法创建一个 CallableStatement 对象的实例.
// 在使用 Connection 对象的 preparedCall() 方法时,
// 需要传入一个 String 类型的字符串, 该字符串用于指明如何调用存储过程.
String sql = "{?= call sum_salary(?, ?)}";
callableStatement = connection.prepareCall(sql);

// 2. 通过 CallableStatement 对象的
//reisterOutParameter() 方法注册 OUT 参数.
callableStatement.registerOutParameter(1, Types.NUMERIC);
callableStatement.registerOutParameter(3, Types.NUMERIC);

// 3. 通过 CallableStatement 对象的 setXxx() 方法设定 IN 或 IN OUT 参数. 若想将参数默认值设为
// null, 可以使用 setNull() 方法.
callableStatement.setInt(2, 80);

// 4. 通过 CallableStatement 对象的 execute() 方法执行存储过程
callableStatement.execute();

// 5. 如果所调用的是带返回参数的存储过程,
//还需要通过 CallableStatement 对象的 getXxx() 方法获取其返回值.
double sumSalary = callableStatement.getDouble(1);
long empCount = callableStatement.getLong(3);

System.out.println(sumSalary);
System.out.println(empCount);

} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCTools.releaseDB(null, callableStatement, connection);
}

}

@Test
public void testC3P0() throws SQLException {
DataSource dataSource = new ComboPooledDataSource("c3p0");

System.out.println(dataSource.getConnection());
}

}

时间: 2024-10-25 18:54:42

如何使用 JDBC 调用存储在数据库中的函数或存储过程的相关文章

如何使用JDBC调用存储在数据库中的函数或存储过程 */

//创建存储过程 alter proc [dbo].[proc_get_customer1] ( @sid varchar(10), @name varchar(20) out, @birth datetime out, @email varchar(30) out, @id char(10) out)with recompileas beginselect id,name,birth,email from customers where id<@sidselect @id=id,@name=n

问卷过程_将编辑好的问卷(存储在数据库中)显示在浏览器中

首先要了解数据的设计,也就是数据室怎么存储在数据库中的. 先来看一个最简单的问卷的构成吧 可以看到大概的结构是:『标题:标题内容标题说明.题目:题目编号,题目内容.选项:选项类型,选项编号,选项内容』.提交:提交按钮.其中『』内的元素就是需要存储到数据库中的. 可以想一下:一张表示是否可以存储一张问卷呢?这应该是可以的但是一个表不应该只能存储一张问卷吧,要不然太浪费资源了. 数据库的设计应该是怎样的呢: 首先:整体的问卷基本信息要有:问卷的编号(我们通过链接把我们的问卷发给别人来填写的话,要唯一

ASP.NET中让图片以二进制的形式存储在数据库中

今早有个网友问到我这问题,以前我都是直接在数据库中存文件名的,还没有试过存储整张图片到数据库中,上网搜索了一下,自己又测试了一番,代码如下:建立保存图片的表的SQL语句: Sql代码   USE [niunantest] GO /****** 对象:  Table [dbo].[picdata]    脚本日期: 03/30/2010 14:51:58 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [d

js上传文件带参数,并且,返回给前台文件路径,解析上传的xml文件,存储到数据库中

ajaxfileupload.js jQuery.extend({ createUploadIframe: function(id, uri) { //create frame var frameId = 'jUploadFrame' + id; if(window.ActiveXObject) { var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '&qu

Kettle_使用资源库功能把ktr元数据统一存储到数据库中

原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/46117065 [目标] 利用kettle中的资源库功能,把ktr文件统一存储到数据库中,方便本地进行版本管理 ktr:使用kettle编辑的转换,被称为ktr: 转换:添加功能模块,实现ETL的项目称为转换. 一路确定后,点击ok完成资源库的创建,如下: 创建完成后,先进

JDBC 调用存储函数 存储过程

JDBC调用存储过程 步骤: 1:通过Connection 对象的prepareCall()方法创建一个CallableStatement对象的实例, 在使用Connection对象的prepareCall()方法时,需要传入一个String类型的字符串, 该方法指明如何调用存储过程. {?= call <procedure-name>[(<arg1>,<arg2>, ...)]} {call <procedure-name>[(<arg1>,&

sqlserver 数据库中时间函数的建立

create function [dbo].[HtoSec](@lvalue as int)RETURNS intBEGINDECLARE @temp intSet @temp = @lvalue * 60 * 60RETURN @tempEND create function [dbo].[GetTime](@dtmValue as datetime)RETURNS intBEGINDECLARE @temp intDECLARE @GMT_TIMEZONE intSET @GMT_TIMEZ

C语言学习_C如何在一个文件里调用另一个源文件中的函数

问题 C如何在一个文件里调用另一个源文件中的函数,如题. 解决办法 当程序大了代码多了之后,想模块化开发,不同文件中存一点,是很好的解决办法,那我们如何做才能让各个文件中的代码协同工作呢?我们知道,main函数是程序入口,我们希望把不同的功能写在不同的函数中,并把这些函数统一放到另外一个文件里,以便main函数显得太长,main函数可以在用到某方法的时候调用来处理.为了实现这个步骤,我们这样做.首先定义一个c代码的头文件,如function.h,在里面声明将要实现的函数,如int add(int

数据库中的函数研究

数据库中的函数研究 1)SQL 拥有很多可用于计数和计算的内建函数 2)常用函数: 3)avg() 返回数值列的平均值 语法:select avg(列名)from table_name 示例: select avg(price) as priceAverage from table_name select ProductName, Price from table_name where Price > (select AVG(Price) from Products) #选择价格高于平均价格的