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 接口的更多相关文章

  1. jdbc java数据库连接 2)jdbc接口核心的API

    JDBC接口核心的API java.sql.*   和  javax.sql.*(java2.0以后更新的扩展) |- Driver接口: 表示java驱动程序接口.所有的具体的数据库厂商要来实现此接 ...

  2. jdbc java数据库连接 3)Statement接口之执行DDL和DML语句的简化

    上一章的代码中,可以发现,jdbc执行DDL和DML有几个步骤都是一样的: 1)执行语句开始时,创建驱动注册对象.获取连接的数据库对象.创建Statement对象 // 创建驱动注册对象 Class. ...

  3. jdbc java数据库连接 3)Statement接口之执行DDL、DML、DQL

    |- Statement接口: 用于执行静态的sql语句 |- int executeUpdate(String sql)  : 执行静态的更新sql语句(DDL,DML) |- ResultSet ...

  4. jdbc java数据库连接 4)PreParedStatement接口 之 区别和例子

    Statement 和 PreparedStatement 的区别: 1)语句不同 PreparedStatement需要预编译以及需要参数 2)由于PreparedStatement有缓存区,所以效 ...

  5. JDBC数据库编程:callableStatement接口

    了解MySQL存储过程建立, 了解存储过程中参数传递的三种方式 了解callablestatement调用存储过程操作. 因为在现在开发中,使用存储过程的地方越来越少,所以,对于存储过程使用,只需要了 ...

  6. jdbc:java数据库连接

    1.导jar包 四大参数: 1.加载驱动类:Class.forName("com.mysql.jdbc.Driver"); 2.url:jdbc:mysql://localhost ...

  7. jdbc java数据库连接 11)中大文本类型的处理

    1. Jdbc中大文本类型的处理 Oracle中大文本数据类型, Clob    长文本类型   (MySQL中不支持,使用的是text) Blob    二进制类型 MySQL数据库, Text   ...

  8. jdbc java数据库连接 8)防止sql注入

    回顾下之前jdbc的开发步骤: 1:建项目,引入数据库驱动包 2:加载驱动 Class.forName(..); 3:获取连接对象 4:创建执行sql语句的stmt对象;  写sql 5:执行sql ...

  9. jdbc java数据库连接 6)类路径读取——JdbcUtil的配置文件

    之前的代码中,以下代码很多时候并不是固定的: private static String url = "jdbc:mysql://localhost:3306/day1029?useUnic ...

随机推荐

  1. linux下c程序的链接、装载和库(3)

    9. 目标文件放在一起-->静态库. 你的同事给出的目标文件太多了,从 one.o two.o …… …… 一直到 xxx.o. 好的,你如果真正想用,你的同事提供的这些现有的目标文件,你得做三 ...

  2. c#中奖算法的实现

    算法名称 Alias Method public class AliasMethod { /* The probability and alias tables. */ private int[] _ ...

  3. JVM监控工具介绍

    JVM监控工具介绍 VisualVM是一种集成了多个JDK命令行工具的可视化工具,它能为您提供强大的分析能力.所有这些都是免费的!它囊括的命令行工具包括jps,jstat,jmap,jinfo,jst ...

  4. 常用C#关键字详解教程

    很多在学习网站后台的同学都对C#的关键字有些摸不到头脑,现在就和大家一起学习一下这些关键字的含义 类型 Void 用作方法的返回类型时,void 关键字指定方法不返回值. 在方法的参数列表中不允许使用 ...

  5. (原) 1.3 zookeeper脚本使用

    本文为原创文章,转载请注明出处,谢谢 zookeeper自带脚本使用 1.进入zookeeper客户端 找到安装目录下的bin目录,执行以下脚本(中括号标示被必填) ./zkCli.sh  -time ...

  6. JavaScript中this指针指向的彻底理解

    this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象 这一点与函数中自由变量Action-varibal不同 var ...

  7. position: fixed用在iframe里面失效了

    iframe真是各种坑啊,,,可是找不到别的代替 $(parent.window).scroll(function(){ $('固定元素').css({ top : $(parent.window). ...

  8. Microsoft Dynamics CRM 分销行业解决方案

    Microsoft Dynamics CRM 分销行业解决方案 方案亮点 360度动态渠道信息管理 充分的客户细分 全面的业务代表考核指标 业务代表管理和能力建设 业务代表过程管理 业务代表费用管理 ...

  9. C#图片处理常见方法性能比较

    C#图片处理常见方法性能比较 来自:http://www.cnblogs.com/sndnnlfhvk/archive/2012/02/27/2370643.html   在.NET编程中,由于GDI ...

  10. Android—基于Socket与上传图片到客户端

    最近项目中需要客户端和Socket互相传递数据时候需要相互传递图片所以做下总结以免以后忘记,也希望给大家带来帮助. 先上客户端的代码: 根据图片名称上传照相机中单个照片(此方法为自己封装) 参数所代表 ...