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. C++_系列自学课程_第_6_课_bitset集_《C++ Primer 第四版》

    在C语言中要对一个整数的某一个位进行操作需要用到很多的技巧.这种情况在C++里面通过标准库提供的一个抽象数据类型 bitset得到了改善. 一.标准库bitset类型 1.bitset的作用 bits ...

  2. 谁在关心toString的性能?

    谁在关心toString的性能?没有人!除非当你有大量的数据在批量处理,使用toString产生了许多日志.然后,你去调查为何如此之慢,才意识到大部分的toString方法使用的是introspect ...

  3. Mybatis中javaType和jdbcType对应关系

    JDBC Type           Java Type CHAR                  String VARCHAR            String LONGVARCHAR    ...

  4. 【新技术】CentOS系统下docker的安装配置及使用详解

    1 docker简介    Docker 提供了一个可以运行你的应用程序的封套(envelope),或者说容器.它原本是dotCloud 启动的一个业余项目,并在前些时候开源了.它吸引了大量的关注和讨 ...

  5. 【JavaScript】详解JSON

    目录结构: // contents structure [-] 什么是JSON JSON和XML的比较 相同点 不同点 JSON语法 如何解析JSON文本 eval()方法 JSON.parse()方 ...

  6. [python]初试页面抓取——抓取沪深股市交易龙虎榜数据

    [python]抓取沪深股市交易龙虎榜数据 python 3.5.0下运行 没做自动建立files文件夹,需要手动在py文件目录下建立files文件夹后运行 #coding=utf-8 import ...

  7. css水平垂直居中(绝对定位居中)

    使用绝对定位有个限制就是父集必须设置一个固定的高度. 首先HTML <div id="box"> <div class="child"> ...

  8. ArcGIS JS 学习笔记4 实现地图联动

    1.开篇 守望屁股实在太好玩了,所以最近有点懒,这次就先写个简单的来凑一下数.这次我的模仿目标是天地图的地图联动. 天地的地图联动不仅地图有联动,而且鼠标也有联动,我就照着这个目标进行山寨. 2.准备 ...

  9. MyEclipse 2016 CI 3发布

    JSjet 语法高亮 受够了Eclipse中的JavaScript编码体验?那就来试试MyEclipse 2016 CI 3.JSjet改进了JavaScript编码的语法高亮功能,大大提升了代码的可 ...

  10. 机顶盒上gridview+ScrollView的使用。

    最近在机顶盒上做一个gridview, 其焦点需要在item的子控件上,但gridview的焦点默认在item上,通过 android:descendantFocusability="aft ...