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. Mysql的旧版本下载地址

    直接进入:http://downloads.mysql.com/archives/community/

  2. 六、SQL优化

    SQL优化 优化策略 一.尽量全值匹配 当建立了索引列后,尽量在where条件中使用所有的索引. CREATE TABLE `staffs`( id int primary key auto_incr ...

  3. C# show Environment property info name and value retrieve, Maximize the Console Window based on window resolution

    using System.Reflection; static void ShowEnvironmentInfoDemo() { Type type = typeof(Environment); Pr ...

  4. Python 條件式 Condition

    除了重複使用Function,有時我們須檢查結果,依此判斷下個步驟該怎麼進行,如此就需要條件式 condition statement. if ... elif ... ese ( 或 if ... ...

  5. [转]UiPath实践经验总结(二)

    本文转自:https://www.cnblogs.com/ybyebo/p/10086473.html 1.       UI操作容易受到各种意外的干扰,因此应该缩短UI操作阶段的总体时间.而为了缩短 ...

  6. 剑指offer 23:从上往下打印二叉树

    题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 解题思路 按照从左往右从上到下的顺序打印节点,需要我们维护一个队列,这个队列放入元素的顺序是访问队头节点(起始先放入根节点),则若当前 ...

  7. R Data Frame

    https://www.datamentor.io/r-programming/data-frame/ Check if a variable is a data frame or not We ca ...

  8. 036.[转] JNDI 学习

    使用外置服务器(如tomcat)时,如果一个服务器启动多个项目,可以使用JNDI配置数据源,这样每个项目都可以获取到Tomcat 配置的 JNDI的数据源. 在学习 jsp 的时候,作用域对象 pag ...

  9. MyBatis之接口绑定方案及多参数传递

    1.说明   所谓的MyBatis接口绑定,指的是实现创建一个接口后,把mapper.xml 由mybatis 生成接口的实现类,通过调用接口对象就可以获取mapper.xml 中编写的sql.在SS ...

  10. WePy框架的使用

    基本示例 import wepy from 'wepy';//引入wepy框架说明 // 通过继承自wepy.page的类创建页面逻辑 export default class Index exten ...