zoukankan      html  css  js  c++  java
  • hibernate调用mysql存储过程

      在mysql中创建两个存储过程,如下:

    1、根据id查找某条数据:

    1 CREATE PROCEDURE `findEmpById`(IN id INTEGER(11))
    2 begin
    3      select * from emp where empId=id;
    4 end;


    2、根据id查找某个字段,并返回

    1 CREATE PROCEDURE `getNameById`(in id integer(11),out eName varchar(50))
    2 begin
    3      select empName into eName from emp where empId=id;
    4 end;

      在存储过程的参数列表里面,in修饰的参数代表输入参数,out修饰的代表输出参数。

    使用hibernate调用上面两个存储过程:

      (1)调用第一个存储过程

     1 package com.test;
     2 
     3 import java.sql.CallableStatement;
     4 import java.sql.Connection;
     5 import java.sql.ResultSet;
     6 import java.sql.SQLException;
     7 
     8 import org.hibernate.Session;
     9 import org.hibernate.SessionFactory;
    10 import org.hibernate.cfg.Configuration;
    11 
    12 
    13 public class 调用存储过程 {
    14 
    15     /**
    16      * @param args
    17      * @throws SQLException 
    18      */
    19     public static void main(String[] args) throws SQLException {
    20         Configuration cfg = new Configuration().configure();
    21         SessionFactory factory = cfg.buildSessionFactory();
    22         Session session = factory.openSession();
    23         Connection con = session.connection();
    24         String sql = "{call findEmpById(?)}";
    25         CallableStatement cs = con.prepareCall(sql);
    26         cs.setObject(1, 2);
    27         ResultSet rs = cs.executeQuery();
    28         while(rs.next()){
    29             int id = rs.getInt("empId");
    30             String name = rs.getString("empName");
    31             System.out.println(id+"	"+name);
    32         }
    33     }
    34 
    35 }

        调用存储过程的sql语句为:call 存储过程名(参数...),不过在java中调用存储过程一般都加{}。调用存储过程使用的是CallableStatement。

      (2)调用第二个存储过程

     1 package com.test;
     2 
     3 import java.sql.CallableStatement;
     4 import java.sql.Connection;
     5 import java.sql.SQLException;
     6 
     7 import org.hibernate.Session;
     8 import org.hibernate.SessionFactory;
     9 import org.hibernate.cfg.Configuration;
    10 
    11 public class 调用存储过程1 {
    12 
    13     
    14     public static void main(String[] args) throws SQLException {
    15         Configuration config = new Configuration().configure();
    16         SessionFactory sessionFactory = config.buildSessionFactory();
    17         Session session = sessionFactory.openSession();
    18         Connection conn = session.connection();
    19         String sql = "{call getNameById(?,?)}";
    20         CallableStatement cs = conn.prepareCall(sql);  
    21         cs.setObject(1, 3); //设置输出参数
    22         cs.registerOutParameter(2, java.sql.Types.VARCHAR); //设置第二个参数为输出参数
    23         cs.execute(); //调用存储过程
    24         String name = cs.getString(2);//获取输出参数
    25         System.out.println(name);
    26     }
    27 
    28 }

      如果有输出参数,需要特别指出,如上面的代码22行。

  • 相关阅读:
    Shell while循环
    Shell for循环
    针对各主流数据mysql、sqlserver、oracle中文乱码问题。
    robots.txt网站爬虫文件设置
    MySql数据类型
    重温国产thinkphp
    CI分支kohana在线文档
    JIRA官方:为什么要用JIRA?
    百度地图V2.0实践项目开发工具类bmap.util.js V1.4
    Eclipse被汉化后恢复EN模式
  • 原文地址:https://www.cnblogs.com/liuling/p/2013-7-29-01.html
Copyright © 2011-2022 走看看