jdbc调用存储过程

使用并获得out模式的参数返回值

//存储过程为sum_sal(deptno department.deptno%type,sum in out number)
CallableStatement cs =conn.prepareCall("{call sum_sal(?,?)}");
cs.setInteger(1,7879);
cs.setDouble(2,0.0);//第二个传什么都无所谓,因为第二个参数是in out模式,是作为输出的
cs.registerOutParameter(2,java.sql.Types.Double,2);//最后那个参数是保留小数点2位
cs.excute();//执行会返回一个boolean结果 //获得结果,获取第二个参数
double result = cs.getDouble(2);

获得oracle返回的结果集

//存储过程为list(result_set out sys_refcursor, which in number)
CallableStatement cs =conn.prepareCall("{call list(?,?)}");
cs.setInteger(2,1);
cs.registerOutParameter(1,racleTypes.CURSOR);
cs.execute();
//获得结果集
ResultSet rs = (ResultSet)cs.getObject(1);

批量操作

批量插入

People表中只有两列,id和name ,还有对应的一个实体类People

批量操作应该放到事务里进行,因为它会存在某条语句执行失败的情况。

public int[] insetBatch(List<People> list) {
try (Connection connection = JdbcUtil.getConnection();
PreparedStatement ps = connection.prepareStatement("insert into PEOPLE values (?,?)");
) {
// 关闭事务自动提交,手动提交
connection.setAutoCommit(false);
//从list中取出数据
for (People people : list) {
ps.setInt(1, people.getId());
ps.setString(2, people.getName());
//加入到指语句组中
ps.addBatch();
}
int[] recordsEffect = ps.executeBatch();
// 提交事务
connection.commit();
return recordsEffect; } catch (SQLException e) {
e.printStackTrace();
}
return null;
}

批量插入测试

public static void main(String[] args) {
List<People> list = new ArrayList<>();
int id = 1;
list.add(new People(id++, "james"));
list.add(new People(id++, "andy"));
list.add(new People(id++, "jack"));
list.add(new People(id++, "john"));
list.add(new People(id++, "scott"));
list.add(new People(id++, "jassica"));
list.add(new People(id++, "jerry"));
list.add(new People(id++, "marry"));
list.add(new People(id++, "alex")); int[] ints = new BatchTest().insetBatch(list); System.out.println(Arrays.toString(ints));
}

批量更新

public int[] updateBatch(List<People> list) {
try (Connection connection = JdbcUtil.getConnection();
PreparedStatement ps = connection.prepareStatement("undate people set name=? where id=?");
) {
// 关闭事务自动提交,手动提交
connection.setAutoCommit(false);
//从list中取出数据
for (People people : list) {
ps.setInt(1, people.getId());
ps.setString(2, people.getName());
//加入到指语句组中
ps.addBatch();
}
int[] recordsEffect = ps.executeBatch();
// 提交事务
connection.commit();
return recordsEffect; } catch (SQLException e) {
e.printStackTrace();
}
return null;
}

批量删除

public int[] updateBatch(List<People> list) {
try (Connection connection = JdbcUtil.getConnection();
PreparedStatement ps = connection.prepareStatement("delete people where id=?");
) {
// 关闭事务自动提交,手动提交
connection.setAutoCommit(false);
//从list中取出数据
for (People people : list) {
ps.setInt(1, people.getId());
//加入到指语句组中
ps.addBatch();
}
int[] recordsEffect = ps.executeBatch();
// 提交事务
connection.commit();
return recordsEffect; } catch (SQLException e) {
e.printStackTrace();
}
return null;
}

oracle学习笔记(二十三)——JDBC调用存储过程以及批量操作的更多相关文章

  1. python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码

    python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...

  2. (C/C++学习笔记) 二十三. 运行时类型识别

    二十三. 运行时类型识别 ● 定义 运行时类型识别(Run-time Type Identification, RTTI) 通过RTTI, 程序能够使用基类的指针或引用来检查(check)这些指针或引 ...

  3. Oracle 学习笔记(二)

    一.索引 表的数据是无序的,所以叫堆表(heap table),意思为随机存储数据.因为数据是随机存储的,所以在查询的时候需要全表扫描.索引就是将无序的数据有序化,这样就可以在查询数据的时候 减少数据 ...

  4. Oracle 学习笔记 18 -- 存储函数和存储过程(PL/SQL子程序)

    PL/SQL子程序 它包含了函数和过程.此功能是指用户定义的函数.和系统功能是不同的.子程序通常完成特定的功能PL/SQL座.,能够被不同的应用程序多次调用.Oracle提供能够把PL/SQL程序存储 ...

  5. Java基础学习笔记二十三 Java核心语法之反射

    类加载器 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,链接,初始化三步来实现对这个类进行初始化. 加载就是指将class文件读入内存,并为之创建一个Class对象.任 ...

  6. angular学习笔记(二十三)-$http(1)-api

    之前说到的$http.get和$http.post,都是基于$http的快捷方式.下面来说说完整的$http: $http(config) $http接受一个json格式的参数config: conf ...

  7. Oracle 学习笔记二

    一.oracle通用函数vnl(a,b) 用于任何类型,如果a的值不为null返回a的值否则返回b的值 条件判断oracle中可以使用 case 字段 when 条件1 then 表达式1 when ...

  8. Oracle学习笔记二 初识Oracle(二)

    Windows 中的 Oracle 服务 Oracle 9i的每个实例在Windows中都作为一项服务启动 服务是在 Windows 注册表中注册的可执行进程,由 Windows 操作系统管理 “服务 ...

  9. oracle学习笔记(二)

    1. Oracle字符串操作 1.1. 字符串类型 1.1.1. CHAR和VARCHAR2类型 CHAR和VARCHAR2类型都是用来表示字符串数据类型,用来在表中存放字符串信息, 比如姓名.职业. ...

随机推荐

  1. ASP.NET Core on K8S深入学习(6)Health Check

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 一.关于K8S中的Health Check 所谓Health Check,就是 ...

  2. C# 使用NAudio合并mp3、wav音频文件

    1.什么是wav格式    WAV为微软公司(Microsoft)开发的一种声音文件格式,它符合RIFF(Resource Interchange File Format)文件规范,用于保存Windo ...

  3. easyui treegrid数据重复加载问题

    在使用easyui的时候,出现了数据重复加载的问题.如下图 关于这个问题有两种说法,第一种说法是 easyui-datagrid 类在html和js中重复定义,数据渲染时会加载两次.另一种是$(&qu ...

  4. Python 从入门到进阶之路(三)

    在之前的文章我们介绍了一下 Python 中 if while for 的使用,本章我们来看一下 Python 中的变量类型. 在 Python 定义变量时的规则是 变量名 = 变量 ,Python ...

  5. Slickflow.NET 开源工作流引擎快速入门之二: 简单并行分支流程代码编写示例

    前言:对于急切想了解引擎功能的开发人员,在下载版本后,就想尝试编写代码,完成一个流程的开发和测试.本文试图从一个最简单的并行分支流程来示例说明,如何快速了解引擎代码的编写. 版本:.NET Core2 ...

  6. OC深浅复制

    浅复制:指针的复制 深复制:内容的复制 主要有两个关键字  copy 和mutablecopy 对于基本类型 判断深浅方法 1.只要=右边从创建到赋值,至少包含一个NSMutable便会重新生成一个对 ...

  7. Android 组件化最佳实践 ARetrofit 原理

    本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/TXFt7ymgQXLJyBOJL8F6xg作者:朱壹飞 ARetrofit 是一款针对Android ...

  8. Linux 和 Windows 查看当前运行的 python 进程及 GPU、CPU、磁盘利用率

    目录 查看当前 python 进程 Linux Windows 查看 GPU 利用率 Linux Windows Linux CPU 利用率 Linux 磁盘利用率 查看当前 python 进程 Li ...

  9. JAVA实现二维码生成加背景图

    pom.xml依赖 <!-- 二维码生成 -->         <!-- https://mvnrepository.com/artifact/com.google.zxing/c ...

  10. 201871010106-丁宣元 《面向对象程序设计(java)》第一周学习总结

    丁宣元 <面向对象程序设计(java)>第一周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在 ...