直接上存储过程、函数

--运行不带參数但带返回值的存储过程
CREATE OR REPLACE PROCEDURE proc_getUserCount(v_totalCount OUT NUMBER) AS
BEGIN
SELECT COUNT(*) INTO v_totalCount FROM vote_user;
END;
--測试不带參数但带返回值的存储过程
DECLARE
v_totalCount NUMBER;
BEGIN
proc_getUserCount(v_totalCount);
dbms_output.put_line(v_totalCount);
END;
--运行带參数返回值的存储过程
CREATE OR REPLACE PROCEDURE proc_getUserCountCondit(username IN VARCHAR2,
v_totalCount OUT NUMBER) AS
BEGIN
SELECT COUNT(*) INTO v_totalCount FROM vote_user
WHERE vu_user_name LIKE '%' || username || '%';
END;
--測试带參数返回值的存储过程
DECLARE
v_username VARCHAR2(20) := 'accp';
v_totalCount NUMBER;
BEGIN
proc_getUserCountCondit(v_username,v_totalCount);
dbms_output.put_line(v_totalCount);
END; --运行返回值为游标的存储过程
CREATE OR REPLACE PROCEDURE proc_getUser(cursor_user OUT sys_refcursor) AS
BEGIN
OPEN cursor_user
FOR
SELECT vu_user_name,vu_password FROM vote_user;
END;
--測试运行返回值为游标的存储过程
DECLARE
cursor_user SYS_REFCURSOR;
v_username VARCHAR2(20);
v_password VARCHAR2(20);
BEGIN
proc_getUser(cursor_user);
LOOP
FETCH cursor_user INTO v_username,v_password;
EXIT WHEN cursor_user%NOTFOUND;
dbms_output.put_line('用户名:' || v_username || ',密码:' || v_password);
END LOOP;
END;
--运行函数
CREATE OR REPLACE FUNCTION func_getUserName(user_id VARCHAR2)
RETURN VARCHAR2
IS username VARCHAR2(20);
BEGIN
SELECT vu_user_name INTO username FROM vote_user
WHERE vu_user_id = user_id;
RETURN username;
EXCEPTION
WHEN no_data_found THEN
RETURN '雇员编号未找到';
END;
--測试函数
DECLARE
username VARCHAR2(20);
BEGIN
username := func_getUserName('accp2');
dbms_output.put_line('用户名:' || username);
END;

Java演示样例代码

/**
* cn.jbit.news.test.Demo2
* 2014-4-27
* gyy
*/
package cn.jbit.news.test; import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List; import oracle.jdbc.OracleTypes; import cn.jbit.news.entity.User;
import cn.jbit.news.util.ConfigManager; public class Demo2 { private ConfigManager config = ConfigManager.getInstance(); // 运行不带參数可是有返回值的存储过程
public int getUserCount() {
int rowsCount = 0; try {
Class.forName(config.getString("jdbc.driver_class"));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection conn = null;
CallableStatement cstmt = null;
try {
conn = DriverManager.getConnection(
config.getString("jdbc.connection.url"),
config.getString("jdbc.connection.username"),
config.getString("jdbc.connection.password"));
String sql = "{call proc_getUserCount(?)}";
// 创建CallableStatement对象
cstmt = conn.prepareCall(sql);
// 注冊输出參数
cstmt.registerOutParameter(1, Types.INTEGER);
// 运行存储过程
cstmt.execute();
rowsCount = cstmt.getInt(1);
} catch (SQLException e) {
e.printStackTrace();
}
return rowsCount;
} // 运行带參数带返回值的存储过程
public int getUserCountByName(String username) {
int rowsCount = 0; try {
Class.forName(config.getString("jdbc.driver_class"));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection conn = null;
CallableStatement cstmt = null;
try {
conn = DriverManager.getConnection(
config.getString("jdbc.connection.url"),
config.getString("jdbc.connection.username"),
config.getString("jdbc.connection.password"));
String sql = "{call proc_getUserCountCondit(?,?)}";
// 创建CallableStatement对象
cstmt = conn.prepareCall(sql);
// 输入參数赋值
cstmt.setString(1, username);
// 注冊输出參数
cstmt.registerOutParameter(2, Types.INTEGER);
// 运行存储过程
cstmt.execute();
rowsCount = cstmt.getInt(2);
} catch (SQLException e) {
e.printStackTrace();
}
return rowsCount;
} // 运行返回值为游标的存储过程运行返回值为游标的存储过程
public List<User> getUserListByProc() {
List<User> userList = null; try {
Class.forName(config.getString("jdbc.driver_class"));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection conn = null;
CallableStatement cstmt = null;
ResultSet rs = null;
try {
conn = DriverManager.getConnection(
config.getString("jdbc.connection.url"),
config.getString("jdbc.connection.username"),
config.getString("jdbc.connection.password"));
String sql = "{call PROC_GETUSER(?)}";
// 创建CallableStatement对象
cstmt = conn.prepareCall(sql);
// 注冊输出參数
cstmt.registerOutParameter(1, OracleTypes.CURSOR);
// 运行存储过程
cstmt.execute();
rs = (ResultSet) cstmt.getObject(1);
userList = new ArrayList<User>();
while (rs.next()) {
String username = rs.getString("VU_USER_NAME");
String password = rs.getString("VU_PASSWORD");
User user = new User();
user.setUsername(username);
user.setPassword(password);
userList.add(user);// 加入用户
}
} catch (SQLException e) {
e.printStackTrace();
}
return userList;
} // 函数
public String getUserNameById(String userId) {
String username = ""; try {
Class.forName(config.getString("jdbc.driver_class"));
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection conn = null;
CallableStatement cstmt = null;
try {
conn = DriverManager.getConnection(
config.getString("jdbc.connection.url"),
config.getString("jdbc.connection.username"),
config.getString("jdbc.connection.password"));
String sql = "{? = call FUNC_GETUSERNAME(?)}";
// 创建CallableStatement对象
cstmt = conn.prepareCall(sql);
// 输入參数赋值
cstmt.setString(2, userId);
// 注冊输出參数
cstmt.registerOutParameter(1, Types.VARCHAR);
// 运行存储过程
cstmt.execute();
username = cstmt.getString(1);
} catch (SQLException e) {
e.printStackTrace();
} return username;
} public static void main(String[] args) {
Demo2 d = new Demo2();
System.out.println("用户人数:" + d.getUserCount());
System.out.println("模糊查询-------用户人数:" + d.getUserCountByName("accp"));
List<User> userList = d.getUserListByProc();
for (User user : userList) {
System.out.println("用户名:" + user.getUsername() + ",密码:"
+ user.getPassword());
}
System.out.println(d.getUserNameById("accp"));
}
}

CallableStatement简单使用的更多相关文章

  1. 通过JDBC进行简单的增删改查(以MySQL为例)

    目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操作 (1)定义记录的类(可选) (2)连接的获取 ( ...

  2. MyBatis学习--简单的增删改查

    jdbc程序 在学习MyBatis的时候先简单了解下JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: Public static void main(String[] args) ...

  3. 通过JDBC进行简单的增删改查

    通过JDBC进行简单的增删改查(以MySQL为例) 目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操 ...

  4. MySQL数据库学习笔记(八)----JDBC入门及简单增删改数据库的操作

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  5. Statement,PreparedStatement和CallableStatement的联系和区别

    联系: CallableStatement继承自PreparedSatement,PreparedStatement继承自Statement. 区别: 1:Statement 每次执行sql语句,数据 ...

  6. Java存储过程调用CallableStatement

    什么是存储过程? 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有 ...

  7. TypeHandler的简单实例

    转自:http://ccchhhlll1988-163-com.iteye.com/blog/1420149 TypeHandler是MyBatis config文件中可选的配置选项,其可以对实体属性 ...

  8. java使用注解和反射打造一个简单的jdbc工具类

    a simple jdbc tools 如有转载和引用,请注明出处,谢谢 1. 定义我们需要的注解 要想实现对数据库的操作,我们必须知道数据表名以及表中的字段名称以及类型,正如hibernate 使用 ...

  9. JDBC第一篇--【介绍JDBC、使用JDBC连接数据库、简单的工具类】

    1.什么是JDBC JDBC全称为:Java Data Base Connectivity,它是可以执行SQL语句的Java API 2.为什么我们要用JDBC 市面上有非常多的数据库,本来我们是需要 ...

随机推荐

  1. Unity UGUI之Text

    下图是Text组件的内容. Character(字符) Text--输入要显示的文本 Font--要渲染文本的字体类型(例如:黑体.宋体) FontStyle--是否要加粗,倾斜等. Normal-- ...

  2. DropdownList 赋初始值问题

    网上查了这样的代码 虽然是可以用.但是会点击多次会出现”“ dropdownList不能选多个值的问题“ private void initdroplistitemlirun(string c_Bus ...

  3. WebService如何抛出干净的异常

    转载:http://www.cnblogs.com/ahdung/p/3953431.html 说明:[干净]指的是客户端在捕获WebService(下称WS)抛出的异常时,得到的ex.Message ...

  4. Integrate SharePoint 2013 with Team Foundation Server 2012

    Now that SharePoint 2013 is out I want to make sure that I can integrate SharePoint 2013 with Team F ...

  5. VS2010程序打包操作(超详细的)转

    1.  在vs2010 选择“新建项目”----“其他项目类型”----“Visual Studio Installerà“安装项目”: 命名为:Setup1 . 这是在VS2010中将有三个文件夹, ...

  6. ice地址

    http://www.zeroc.com/download/eclipse

  7. redis cluster 设置密码做集群时gem下client.rb文件修改

    redis节点有设置密码,然后在创建集群的时候没有设置密码的命令 ./redis-trib.rb create --replicas 1 127.0.0.1:6381 127.0.0.1:6382 1 ...

  8. wget 下载文件重进行命名

    wget在下载的时候就重命名的: wget -c "www.baidu.com" -O baidu.index.html 保存输出日至,可以使用: wget -c "ww ...

  9. 【JSP EL】EL表达式里日期按照格式显示

    转:http://blog.csdn.net/kaishuaige/article/details/8505174 JSP页面用EL表达式 输出date格式     1.头上引入标签 <%@ t ...

  10. Linux使用RPM安装软件

    什么是RMP? RPM 的为Redhat Package Manager (RPM软件包管理器)的缩写. RPM包,这种软件包就像windows的EXE安装文件一样,各种文件已经编译好,并打了包,哪个 ...