jdbc java数据库连接 5)CallableStatement 接口

  CallableStatement执行存储过程(也是预编译语言)

首先在sql中执行以下带有输入参数的代码:

1       DELIMITER $
2               CREATE PROCEDURE pro_findById(IN sid INT)
3       BEGIN
4               SELECT * FROM person WHERE id = sid;
5       END $

那么,这条语句的存储过程代码就是

CALL pro_findById (?);

  使用CallableStatement来执行:

 1     /**
 2       带有输入参数的存储语言
 3       sql中先运行
 4       DELIMITER $
 5               CREATE PROCEDURE pro_findById(IN sid INT)
 6       BEGIN
 7               SELECT * FROM person WHERE id = sid;
 8       END $
 9      */
10     private static void testIn() {
11
12         Connection conn = null;
13         CallableStatement stsm = null;
14         ResultSet rs = null;
15     try{
16         //1:创建连接
17         conn = Jdbcutil.getConnection();
18
19         //2:准备sql语言(带有存储过程的预编译语言)
20         String sql = "CALL pro_findById(?);";
21
22         //3:执行预编译语言
23         stsm = conn.prepareCall(sql);
24
25         //4:设置参数
26         stsm.setInt(1, 4);
27
28         //5:发送参数,执行sql(注意:CallableStatement执行sql只有executeQuery()方法)
29         //返回ResultSet对象
30          rs = stsm.executeQuery();
31
32         //6:遍历,打印出结果
33     while(rs.next()){
34         int id = rs.getInt("id");
35         String name = rs.getString("name");
36         String sex = rs.getString("sex");
37         System.out.println(id+","+name+","+sex);
38          }
39          }
40     catch(Exception e){
41         e.printStackTrace();
42         throw new RuntimeException(e);
43     }
44     //7:关闭连接
45     finally{
46         Jdbcutil.close(conn, stsm, rs);
47     }
48
49     }

在sql中执行带有输入参数和输出参数的代码:

DELIMITER $
CREATE PROCEDURE pro_findout(IN sid INT ,OUT sname VARCHAR(20))
BEGIN
    SELECT NAME INTO sname FROM person WHERE id = sid;
END $

这段代码的存储过程代码是:

1 CALL pro_findout(4,@NAME);
2 //预编译语言就是
3 //CALL pro_findout(?,?);

使用CallableStatement来执行:

 1 /**
 2          带有输入,输出参数的存储语言
 3          DELIMITER $
 4             CREATE PROCEDURE pro_findout(IN sid INT ,OUT sname VARCHAR(20))
 5         BEGIN
 6             SELECT NAME INTO sname FROM person WHERE id = sid;
 7         END $
 8      */
 9     private static void InAndOut() {
10
11         Connection conn = null;
12         CallableStatement stsm = null;
13
14         try{
15
16             //1:创建连接
17             conn = Jdbcutil.getConnection();
18
19             //2:创建sql存储语言(预编译)
20             String sql = "CALL pro_findout(?,?)";
21
22             //3:执行sql预编译语言
23             stsm = conn.prepareCall(sql);
24
25             //4:设置参数
26             /**
27              * 第一个参数是输入参数
28              * 第二个参数是存储过程中的输出参数的jdbc类型(这里是varchar())
29              *                在sql.Types中寻找对应的类型
30              */
31             //4.1:第一个参数的设置
32             stsm.setInt(1, 4);
33             //4.2:第二个参数的设置
34             stsm.registerOutParameter(2,java.sql.Types.VARCHAR);
35
36             //5:发送参数,执行sql:这个返回的不是ResultSet对象
37             stsm.executeQuery();
38
39             /**
40              * 6:得到输出参数的值
41              *         根据索引值,也就是预编译sql语言中输出参数的位置
42              */
43             String result = stsm.getString(2);
44             System.out.println(result);
45         }
46         catch(Exception e){
47             e.printStackTrace();
48             throw new RuntimeException(e);
49         }
50             //7:关闭连接
51         finally{
52             Jdbcutil.close(conn, stsm);
53         }
54
55
56     }
时间: 2024-10-18 21:58:38

jdbc java数据库连接 5)CallableStatement 接口的相关文章

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

JDBC接口核心的API java.sql.*   和  javax.sql.*(java2.0以后更新的扩展) |- Driver接口: 表示java驱动程序接口.所有的具体的数据库厂商要来实现此接口. |- connect(url, properties):  连接数据库的方法.   url: 连接数据库的URL URL语法: jdbc协议:数据库子协议://主机:端口/数据库 user: 数据库的用户名 password: 数据库用户密码 |- DriverManager类: 驱动管理器类

jdbc java数据库连接 3)Statement接口

|- Statement接口: 用于执行静态的sql语句 |- int executeUpdate(String sql)  : 执行静态的更新sql语句(DDL,DML) |- ResultSet executeQuery(String sql)  :执行的静态的查询sql语句(DQL) |-PreparedStatement接口(Statement接口的子类):用于执行预编译sql语句 |- int executeUpdate() : 执行预编译的更新sql语句(DDL,DML) |-Res

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

上一章的代码中,可以发现,jdbc执行DDL和DML有几个步骤都是一样的: 1)执行语句开始时,创建驱动注册对象.获取连接的数据库对象.创建Statement对象 1 // 创建驱动注册对象 2 Class.forName("com.mysql.jdbc.Driver"); 3 4 // 获取连接的数据库对象 5 Connection conn = DriverManager.getConnection(url, user, 6 password); 7 8 // 创建Statemen

JAVA学习笔记(五十)- JDBC Java数据库连接

JDBC操作步骤 /* * JDBC操作步骤 * */ public class Test01 { public static void main(String[] args) { try { //1.加载并注册驱动 Class.forName("com.mysql.jdbc.Driver"); //DriverManager.registerDriver(new com.mysql.jdbc.Driver()); System.out.println("注册驱动成功!&qu

jdbc java数据库连接 1)jdbc入门

  之前操作数据 1)通过mysql的客户端工具,登录数据库服务器  (mysql -u root -p 密码) 2)编写sql语句 3)发送sql语句到数据库服务器执行 什么是jdbc? 使用java代码(程序)发送sql语句的技术,就是jdbc技术!!!! 使用jdbc发送sql前提 登录数据库服务器(连接数据库服务器) 数据库的IP地址 端口 数据库用户名 密码 代码: 1 public class MySql_Demo1 { 2 3 //创建一个url 4 private static

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

1. Jdbc中大文本类型的处理 Oracle中大文本数据类型, Clob    长文本类型   (MySQL中不支持,使用的是text) Blob    二进制类型 MySQL数据库, Text    长文本类型 Blob    二进制类型 需求: jdbc中操作长文本数据. 设计: 测试表 编码: 保存大文本数据类型 读取大文本数据类型 保存二进制数据 读取二进制数据 MYSQL: 1 -- 测试大数据类型 2 CREATE TABLE test( 3 id INT PRIMARY KEY

jdbc java数据库连接 9)事务编程

1. 事务 基本概念: 事务使指一组最小逻辑操作单元,里面有多个操作组成. 组成事务的每一部分必须要同时提交成功,如果有一个操作失败,整个操作就回滚. 事务ACID特性: l 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生. l 一致性(Consistency 事务必须使数据库从一个一致性状态变换到另外一个一致性状态. l 隔离性(Isolation) 事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务

Java基础知识强化25:JDBC(Java Data Base Connectivity,java数据库连接)

JDBC  1.    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名. 2.     有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事.换言之,有了JDBC API,就不必为访问Sybase数据库专门写一

Java基础系列12:使用CallableStatement接口调用数据库中的存储过程

前言:以下内容均以MySQL中的存储过程举例说明 一 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是