zoukankan      html  css  js  c++  java
  • 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     }
  • 相关阅读:
    数据库查询服务DBCacheServer
    SmallMQ实现发布
    数据库查询服务DBCacheServer
    Mysql ACID与隔离级别
    jsp拾遗
    Git项目创建与提交
    Spring Boot详细学习地址转载
    Spring Cloud微服务体系搭建
    前后端分离项目启动参考
    JVM类加载机制总结
  • 原文地址:https://www.cnblogs.com/LZL-student/p/6013520.html
Copyright © 2011-2022 走看看