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 ...
随机推荐
- 第 31 章 项目实战-PC 端固定布局[3]
学习要点: 1.搜索区 2.插入大图 3.搜索框 主讲教师:李炎恢 本章主要开始使用学习用 HTML5 和 CSS3 来构建 Web 页面,第一个项目采用 PC 端固定布局来实现. 一.搜索区 本节课 ...
- PostgreSQL保存文件到数据库
1.CREATE TABLE public.t_file ( id INTEGER PRIMARY KEY NOT NULL DEFAULT nextval('t_file_id_seq'::regc ...
- 从零开始学 Java - CentOS 下 Nginx + Tomcat 配置负载均衡
为什么现在有非常多的聪明人都在致力于互联网? 最近在读埃隆·马斯克传记,他说「我认为现在有非常多的聪明人都在致力于互联网」. 仔细一想,好像真的是这样的. 我问了自己一个问题:如果你不敲代码了,你能做 ...
- 【系统架构】缓存Memcache 使用原子性操作add,实现并发锁
原文地址 memcache中Memcache::add()方法在缓存服务器之前不存在key时, 以key作为key存储一个变量var到缓存服务器.我们使用add来向服务器添加一个键值对应,如果成功则添 ...
- 6、ASP.NET MVC入门到精通——ASP.Net的两种开发方式
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 目前,ASP.NET中两种主流的开发方式是:ASP.NET Webform和ASP.NET MVC.从下图可以看到ASP.NET WebFo ...
- 使用原生JS实现一个风箱式的demo,并封装了一个运动框架
声明,该DEMO依托于某个培训机构中,非常感谢这个培训结构.话不多说,现在开始改demo的制作. 首先,在前端的学习过程中,轮播图是我们一定要学习的,所以为了更加高效的实现各种轮播图,封装了一个运动的 ...
- iOS之自动调节输入文本框的高度
//自动调节输入文本框的高度 - (void)textViewDidChange:(UITableView *)textView{ float height; if ([[[UIDevice curr ...
- 使用NSAssert()和NSParameterAssert调试程序
NSAssert: NSAssert()只是一个宏,用于开发阶段调试程序中的Bug,通过为NSAssert()传递条件表达式来断定是否属于Bug,满足条件返回真值,程序继续运行,如果返回假值,则抛出异 ...
- Android 热修复技术(1)---原理
热修复技术分为几部分: 原理介绍 Android HotFix源码分析 自定义框架 1.Android分包MultiDex原理 首先Dex是什么东西? Dex就是Window里面的exe文件 也就是可 ...
- MVC学习系列2--向Action方法传递参数
首先,新建一个web项目,新建一个Home控制器,默认的代码如下: public class HomeController : Controller { // GET: Home public Act ...