CallableStatement简单使用
直接上存储过程、函数
--运行不带參数但带返回值的存储过程
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简单使用的更多相关文章
- 通过JDBC进行简单的增删改查(以MySQL为例)
目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操作 (1)定义记录的类(可选) (2)连接的获取 ( ...
- MyBatis学习--简单的增删改查
jdbc程序 在学习MyBatis的时候先简单了解下JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: Public static void main(String[] args) ...
- 通过JDBC进行简单的增删改查
通过JDBC进行简单的增删改查(以MySQL为例) 目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操 ...
- MySQL数据库学习笔记(八)----JDBC入门及简单增删改数据库的操作
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Statement,PreparedStatement和CallableStatement的联系和区别
联系: CallableStatement继承自PreparedSatement,PreparedStatement继承自Statement. 区别: 1:Statement 每次执行sql语句,数据 ...
- Java存储过程调用CallableStatement
什么是存储过程? 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有 ...
- TypeHandler的简单实例
转自:http://ccchhhlll1988-163-com.iteye.com/blog/1420149 TypeHandler是MyBatis config文件中可选的配置选项,其可以对实体属性 ...
- java使用注解和反射打造一个简单的jdbc工具类
a simple jdbc tools 如有转载和引用,请注明出处,谢谢 1. 定义我们需要的注解 要想实现对数据库的操作,我们必须知道数据表名以及表中的字段名称以及类型,正如hibernate 使用 ...
- JDBC第一篇--【介绍JDBC、使用JDBC连接数据库、简单的工具类】
1.什么是JDBC JDBC全称为:Java Data Base Connectivity,它是可以执行SQL语句的Java API 2.为什么我们要用JDBC 市面上有非常多的数据库,本来我们是需要 ...
随机推荐
- Unity创建asset文件的扩展编辑器
using UnityEngine; using UnityEditor; using System.IO; public class CreateAsset : EditorWindow { pri ...
- Unity 的一些特性
using System; using UnityEngine; using UnityEditor; using UnityEngine.Serialization; using Random = ...
- 电脑硬件天梯图—CPU、显卡、主板
看到许多玩家对电脑的配置一点都不懂,这里特地制作了最新的硬件天梯图--CPU,显卡,主板,让大家对电脑硬件孰优孰劣有个一目了然的了解. 看不清楚的情点击小图看大图. 首先是CPU天梯图: 其次是显卡天 ...
- shell练习题
一.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. 原文代码为: Shell 1 2 3 4 5 6 7 8 9 10 #!/bin/bash ...
- 十款最常见的Linux发行版及目标用户(1)
1. Debian Debian运行起来极其稳定,这使得它非常适合用于服务器.Debian平 时维护三套正式的软件库和一套非免费软件库,这给另外几款发行版(比如Ubuntu和Kali等)带来了灵感.D ...
- pytest文档4-测试用例setup和teardown
前言 学过unittest的都知道里面用前置和后置setup和teardown非常好用,在每次用例开始前和结束后都去执行一次. 当然还有更高级一点的setupClass和teardownClass,需 ...
- PTC点击网赚入门
第一次接触PTC大概是11月19号左右,那时候第一感觉是"这不就是传销吗,肯定是骗人的",但是由于利润十分之大,又忍不住仔细研究了一下,我还是十分还是十分谨慎的,再加上程序员的头脑 ...
- shell执行时文件命名导致的错误
1.脚本check_nginx.sh的内容如下: #!/bin/bash count=$(ps -ef | grep nginx | grep -v grep | wc -l) echo $count ...
- 2016年终总结--一个Python程序猿的跨界之旅
时间过得真快.感觉15年年终总结刚写完,16年就结束了.看了blog,16年就写了可怜的8篇,对我来说16年还算顺风顺水. 真正可能出乎意料的是年底我离开了呆了2年半的龙图游戏,临时放弃了用了3年半的 ...
- 用IIS防止mdb数据库被下载
如何防止mdb数据库被下载?本文讨论的是在服务器端禁止mdb格式数据库文件被下载,而不是在数据库中加入防下载表,将数据库名改为含#号的asp.asa等后缀格式. 下面以IIS6.0为例说明如何在服务器 ...