JDBC详解之存储过程的调用
来源:互联网 发布:中石油hazop风险矩阵 编辑:程序博客网 时间:2024/05/20 15:11
1.JDBC存储过程之调用无参存储过程
存储过程代码:
CREATE PROCEDURE imooc_db.sp_select_nofilter()//默认是前面要加spBEGIN select * from imooc_goddess;END;
调用代码:
Connection conn=DBUtil.getConnection();//获取连接CallableStatement c=conn.prepareCall("call sp_select_nofilter()");//call 空格sp...c.execute();ResultSet rs=c.getResultSet();
存储过程一般名称前面要加sp,方法体放在begin,end之间。调用时还是要创建连接,我们之前jdbc后面则是创建statement对象或者PreparedStatement对象,在这里则是CallableStatement,调用的方法是prepareCall方法,后面参数call+空格方法名。
这里的例子,存储过程END后面符号问题,因为之前学的时候都是要在命令行变更结尾符号,然后结尾//
,但是我用navicat自己尝试的时候,不需要直接就能用,END后面也不用加符号。这里先暂时用它创建一个存储过程并且调用成功。
在存储过程添加完后,做一个实际的例子还是用上节的内容:
public static void sp_select_nofilter(){ //获得连接 Connection conn=DBUtil.getConnection(); try { //获得CallableStatement对象 CallableStatement cs=conn.prepareCall("Call sp_select_nofilter()"); //执行存储过程 cs.execute(); //处理结果:结果集,出参 ResultSet rs=cs.getResultSet(); while(rs.next()){ System.out.println(rs.getString("user_name")+ rs.getString("email")+rs.getString("mobile")); } } catch (SQLException e) { e.printStackTrace(); } }
2.JDBC存储过程之调用带输入参数的存储过程
mysql的if else if语句之前没有接触过,下面的代码含义是带了一个参数,如果输入是空或者空的字符串,那么搜索所有内容,如果参数是11位并且首位是1,则带条件搜索手机,剩余的则用名字来进行模糊匹配:
CREATE PROCEDURE sp_select_filter(IN sp_name VARCHAR(20))BEGIN IF sp_name IS NULL THEN SELECT * FROM imooc_goddess; ELSE IF LENGTH(sp_name)=11 AND SUBSTRING(sp_name,1,1)=1 THEN SELECT * FROM imooc_goddess WHERE mobile=sp_name; ELSE SELECT * FROM imooc_goddess WHERE user_name LIKE CONCAT('%',SP_NAME,'%'); END IF; END IF;END
static List<Goddess> result1=new ArrayList<Goddess>(); public static List<Goddess> sp_select_filter(String sp_name) throws Exception{ //获得连接 Connection conn=DBUtil.getConnection(); //获得CallableStatement对象 CallableStatement cs=conn.prepareCall("Call sp_select_filter(?)"); cs.setString(1,sp_name); //执行存储过程 cs.execute(); ResultSet rs=cs.getResultSet(); Goddess g=null; while(rs.next()){ g=new Goddess(); g.setId(rs.getInt("id")); g.setUser_name(rs.getString("user_name")); g.setMobile(rs.getString("mobile")); g.setAge(rs.getInt("age")); result1.add(g); } return result1; }
3.JDBC调用之调用带输出参数的存储过程
这里我们首先来看一下写出来的出参存储过程
CREATE PROCEDURE sp_select_count(OUT count INT(10))BEGIN SELECT count(*) INTO count1 FROM imooc_goddess;END
这里我直接用命令行去测试了一下,可以返回有多少条记录。
public static Integer select_count() throws Exception{ Integer count=0; //获得连接 Connection conn=DBUtil.getConnection(); //获得CallableStatement对象 CallableStatement cs=conn.prepareCall("Call sp_select_count(?)"); //这里就不能跟之前一样了,因为是输出参数,出参而不是入参,所以不能使用setString或者其他set去赋值, //咱们需要注册输出参数,需要一个sql的类型,咱们需要告诉JDBC,咱们输出的参数是什么类型 cs.registerOutParameter(1,Types.INTEGER);//Types,jdbc封装的java里常用的数据类型 //执行存储过程 cs.execute(); //处理结果集,获取一下 count=cs.getInt(1); return count; }
阅读全文
0 0
- JDBC详解之存储过程的调用
- JDBC调用存储过程详解
- JDBC之调用存储过程
- JDBC之调用存储过程
- JDBC之调用存储过程
- JDBC存储过程的调用
- jdbc调用存储过程
- Jdbc调用存储过程
- jdbc调用存储过程
- jdbc调用存储过程
- JDBC调用存储过程
- JDBC调用存储过程
- JDBC调用存储过程
- Jdbc存储过程调用
- jdbc调用存储过程
- JDBC调用存储过程
- Jdbc调用存储过程
- JDBC调用存储过程
- Android探索之旅(第二十九篇)QRCode终极秘术之三码合一(微信,QQ,支付宝)
- Node.js调试工具
- HeapSort非递归实现
- 明码 与 密码 切换
- 微信小程序开发心得--动画机制
- JDBC详解之存储过程的调用
- Python多进程multiprocessing.Pool()
- 报告丨2016-2017年中国手机地图市场研究报告
- 自定义函数标签,用于前台获取小数据,例如下拉框中的值
- flask搭建个人博客(一)
- 上传问题总结(文件大小检测,大文件上传)
- 机器学习日记001
- 剔除多余括号 解题报告
- SpringIoc问题汇总