jdbc java数据库连接 5)CallableStatement 接口
CallableStatement执行存储过程(也是预编译语言)
首先在sql中执行以下带有输入参数的代码:
DELIMITER $
CREATE PROCEDURE pro_findById(IN sid INT)
BEGIN
SELECT * FROM person WHERE id = sid;
END $
那么,这条语句的存储过程代码就是
CALL pro_findById (?);
使用CallableStatement来执行:
/**
带有输入参数的存储语言
sql中先运行
DELIMITER $
CREATE PROCEDURE pro_findById(IN sid INT)
BEGIN
SELECT * FROM person WHERE id = sid;
END $
*/
private static void testIn() { Connection conn = null;
CallableStatement stsm = null;
ResultSet rs = null;
try{
//1:创建连接
conn = Jdbcutil.getConnection(); //2:准备sql语言(带有存储过程的预编译语言)
String sql = "CALL pro_findById(?);"; //3:执行预编译语言
stsm = conn.prepareCall(sql); //4:设置参数
stsm.setInt(1, 4); //5:发送参数,执行sql(注意:CallableStatement执行sql只有executeQuery()方法)
//返回ResultSet对象
rs = stsm.executeQuery(); //6:遍历,打印出结果
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
String sex = rs.getString("sex");
System.out.println(id+","+name+","+sex);
}
}
catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}
//7:关闭连接
finally{
Jdbcutil.close(conn, stsm, rs);
} }
在sql中执行带有输入参数和输出参数的代码:
DELIMITER $
CREATE PROCEDURE pro_findout(IN sid INT ,OUT sname VARCHAR(20))
BEGIN
SELECT NAME INTO sname FROM person WHERE id = sid;
END $
这段代码的存储过程代码是:
CALL pro_findout(4,@NAME);
//预编译语言就是
//CALL pro_findout(?,?);
使用CallableStatement来执行:
/**
带有输入,输出参数的存储语言
DELIMITER $
CREATE PROCEDURE pro_findout(IN sid INT ,OUT sname VARCHAR(20))
BEGIN
SELECT NAME INTO sname FROM person WHERE id = sid;
END $
*/
private static void InAndOut() { Connection conn = null;
CallableStatement stsm = null; try{ //1:创建连接
conn = Jdbcutil.getConnection(); //2:创建sql存储语言(预编译)
String sql = "CALL pro_findout(?,?)"; //3:执行sql预编译语言
stsm = conn.prepareCall(sql); //4:设置参数
/**
* 第一个参数是输入参数
* 第二个参数是存储过程中的输出参数的jdbc类型(这里是varchar())
* 在sql.Types中寻找对应的类型
*/
//4.1:第一个参数的设置
stsm.setInt(1, 4);
//4.2:第二个参数的设置
stsm.registerOutParameter(2,java.sql.Types.VARCHAR); //5:发送参数,执行sql:这个返回的不是ResultSet对象
stsm.executeQuery(); /**
* 6:得到输出参数的值
* 根据索引值,也就是预编译sql语言中输出参数的位置
*/
String result = stsm.getString(2);
System.out.println(result);
}
catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}
//7:关闭连接
finally{
Jdbcutil.close(conn, stsm);
} }
jdbc java数据库连接 5)CallableStatement 接口的更多相关文章
- jdbc java数据库连接 2)jdbc接口核心的API
JDBC接口核心的API java.sql.* 和 javax.sql.*(java2.0以后更新的扩展) |- Driver接口: 表示java驱动程序接口.所有的具体的数据库厂商要来实现此接 ...
- jdbc java数据库连接 3)Statement接口之执行DDL和DML语句的简化
上一章的代码中,可以发现,jdbc执行DDL和DML有几个步骤都是一样的: 1)执行语句开始时,创建驱动注册对象.获取连接的数据库对象.创建Statement对象 // 创建驱动注册对象 Class. ...
- jdbc java数据库连接 3)Statement接口之执行DDL、DML、DQL
|- Statement接口: 用于执行静态的sql语句 |- int executeUpdate(String sql) : 执行静态的更新sql语句(DDL,DML) |- ResultSet ...
- jdbc java数据库连接 4)PreParedStatement接口 之 区别和例子
Statement 和 PreparedStatement 的区别: 1)语句不同 PreparedStatement需要预编译以及需要参数 2)由于PreparedStatement有缓存区,所以效 ...
- JDBC数据库编程:callableStatement接口
了解MySQL存储过程建立, 了解存储过程中参数传递的三种方式 了解callablestatement调用存储过程操作. 因为在现在开发中,使用存储过程的地方越来越少,所以,对于存储过程使用,只需要了 ...
- jdbc:java数据库连接
1.导jar包 四大参数: 1.加载驱动类:Class.forName("com.mysql.jdbc.Driver"); 2.url:jdbc:mysql://localhost ...
- jdbc java数据库连接 11)中大文本类型的处理
1. Jdbc中大文本类型的处理 Oracle中大文本数据类型, Clob 长文本类型 (MySQL中不支持,使用的是text) Blob 二进制类型 MySQL数据库, Text ...
- jdbc java数据库连接 8)防止sql注入
回顾下之前jdbc的开发步骤: 1:建项目,引入数据库驱动包 2:加载驱动 Class.forName(..); 3:获取连接对象 4:创建执行sql语句的stmt对象; 写sql 5:执行sql ...
- jdbc java数据库连接 6)类路径读取——JdbcUtil的配置文件
之前的代码中,以下代码很多时候并不是固定的: private static String url = "jdbc:mysql://localhost:3306/day1029?useUnic ...
随机推荐
- javaweb学习总结(三十八)——事务
一.事务的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 例如:A——B转帐,对应于如下两条sql语句 update from account set mone ...
- 03-树1 树的同构 (C语言链表实现)
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h& ...
- 【夯实PHP基础系列】JQuery easyUI的使用
最近在做一个公司的后台项目中,接触到 JQuery easyUI前端框架,被她简洁的代码和简单有效的ajax交互所深深吸引. 体会有以下3个方面: 1)快速创建表格的能力: 后端程序,比如PHP只需要 ...
- JMeter专题系列(三)元件的作用域与执行顺序
1.元件的作用域 JMeter中共有8类可被执行的元件(测试计划与线程组不属于元件),这些元件中,取样器是典型的不与其它元件发生交互作用的元件,逻辑控制器只对其子节点的取样器有效,而其它元件(conf ...
- mariadb 10.2.3支持延时复制
在mysql 5.6开始就支持延时复制,这在一些需要维护大量非标准化系统或者运维技术水平较低的公司和开发人员众多的项目组这是一个非常有价值的特性,可以说误操作的概率跟一个城市车祸概率的水平差不多了,我 ...
- 十一个行为模式之观察者模式(Observer Pattern)
定义: 定义对象之间一种一对多的关系,当被观察者状态变化时,可以自动地通知观察者并执行相关的业务操作.观察者模式又被称为发布-订阅模式等. 结构图: Subject:抽象主题类,定义了所有被观察类的通 ...
- iscroll总结
iScroll基本信息 官网:http://cubiq.org/iscroll-4 更新:2012.07.14 版本:v4.2.5 兼容:iPhone/Ipod touch >=3.1.1, i ...
- 期待已久的2013年度最佳 jQuery 插件揭晓
让人期待已久的2013年度最佳 jQuery 插件揭晓了.在过去的一年里,有很多很多的 jQuery 插件发布出来,而这里文章列出的这些插件从提供的功能更角度来看是其中的佼佼者.相信这些优秀的 jQu ...
- MySQL外键与外键关系说明(简单易懂)
MySQL主键和外键使用及说明 一.外键约束 MySQL通过外键约束来保证表与表之间的数据的完整性和准确性. 外键的使用条件: 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后 ...
- SharePoint 2013 文档库中PPT转换PDF
通过使用 PowerPoint Automation Services,可以从 PowerPoint 二进制文件格式 (.ppt) 和 PowerPoint Open XML 文件格式 (.pptx) ...