oracle学习笔记(二十三)——JDBC调用存储过程以及批量操作
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调用存储过程以及批量操作的更多相关文章
- python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码
python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...
- (C/C++学习笔记) 二十三. 运行时类型识别
二十三. 运行时类型识别 ● 定义 运行时类型识别(Run-time Type Identification, RTTI) 通过RTTI, 程序能够使用基类的指针或引用来检查(check)这些指针或引 ...
- Oracle 学习笔记(二)
一.索引 表的数据是无序的,所以叫堆表(heap table),意思为随机存储数据.因为数据是随机存储的,所以在查询的时候需要全表扫描.索引就是将无序的数据有序化,这样就可以在查询数据的时候 减少数据 ...
- Oracle 学习笔记 18 -- 存储函数和存储过程(PL/SQL子程序)
PL/SQL子程序 它包含了函数和过程.此功能是指用户定义的函数.和系统功能是不同的.子程序通常完成特定的功能PL/SQL座.,能够被不同的应用程序多次调用.Oracle提供能够把PL/SQL程序存储 ...
- Java基础学习笔记二十三 Java核心语法之反射
类加载器 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,链接,初始化三步来实现对这个类进行初始化. 加载就是指将class文件读入内存,并为之创建一个Class对象.任 ...
- angular学习笔记(二十三)-$http(1)-api
之前说到的$http.get和$http.post,都是基于$http的快捷方式.下面来说说完整的$http: $http(config) $http接受一个json格式的参数config: conf ...
- Oracle 学习笔记二
一.oracle通用函数vnl(a,b) 用于任何类型,如果a的值不为null返回a的值否则返回b的值 条件判断oracle中可以使用 case 字段 when 条件1 then 表达式1 when ...
- Oracle学习笔记二 初识Oracle(二)
Windows 中的 Oracle 服务 Oracle 9i的每个实例在Windows中都作为一项服务启动 服务是在 Windows 注册表中注册的可执行进程,由 Windows 操作系统管理 “服务 ...
- oracle学习笔记(二)
1. Oracle字符串操作 1.1. 字符串类型 1.1.1. CHAR和VARCHAR2类型 CHAR和VARCHAR2类型都是用来表示字符串数据类型,用来在表中存放字符串信息, 比如姓名.职业. ...
随机推荐
- 小程序-picker组件选择数量
<!-- detail.wxml --> <view class="picker"> <picker range="{{range}}&qu ...
- vue.js 的 vue-element-admin 实践开发
官方网址: https://panjiachen.github.io/vue-element-admin-site/zh/ 一:面包屑导航,根目录文字修改: 定位到文件 vue-element-sup ...
- Yii2中$model->load($data)一直返回false问题
上次使用$model->load()方法时一直返回false,数据添加不成功,这里记录一下: 出错代码: $data = [ 'name' => 'test', 'phone' => ...
- window.innerHeight和document.documentElement.clientHeight区别
今天有人问我这个问题,做了个小例子来记录一下子. 首先这两个都是获取可视区域的高度,那他们有什么区别呢 1.window.innerHeight属于BOM(浏览器对象模型),而document.doc ...
- Java面试必备:手写单例模式
面试官:请手写下几种常见的单例模式 我:好的(面带微笑),心里暗喜(送分题). 没成想提笔便写出了如此豪放的代码,不堪回首,请原谅我的不羁! 此篇整理了几种常见的单例模式代码示例,再有面试官让手撕单例 ...
- [browser window窗口大小 算是screen补充吧]主要因为移动IE游览器 写了个兼容
先上图吧 来上代码 console.log(window.outerWidth + '--' + window.outerHeight);//只读的整数,声明了整个窗口的XY //IE 不支持此属性, ...
- ie11 SCRIPT5011:不能执行已释放Script的代码
依照我遇到的问题为例: (我的页面结构为:父页面中嵌套有iframe子页面) 1.造成这种情况的原因是:父页面初始化声明变量a为数组(数组对象是引用类型,赋值传递的是地址),创建iframe子页面后给 ...
- tcprstat和tcpstat性能监控
tcprstat分析服务的响应速度利器 tcprstat是percona用来监测mysql响应时间的.不过对于任何运行在TCP协议上的响应时间,都可以用. 下面是一个监控示例,监控分析mysql的 ...
- Java - IO System类支持和缓冲流
System类的支持和缓冲流 System类对IO的支持 在System类中,为了支持IO操作提供了三个常量: 错误输出: public static final PrintStream err; 输 ...
- python数据库模块
安装数据库 [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.3/centos7-amd64 gpgkey=https://yu ...