1. 程式人生 > >hibernate呼叫mysql的儲存過程

hibernate呼叫mysql的儲存過程

轉自:http://www.cnblogs.com/liuling/archive/2013/07/29/2013-7-29-01.html

在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+"\t"+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行。


相關推薦

spring data jpa 如何呼叫mysql儲存過程

  A:首先定義儲存過程依賴的jpa表:     @Entity     @Table(name="evenmngt_childthingtree_tmp")//資料庫中的表名     @Name

jdbc呼叫mysql儲存過程

public static void updateMtBeginTimeIsSix() { Connection connection = null; CallableStatement cs = null; try { connection = DataSource.getI

mybaties呼叫mysql儲存過程儲存過程返回多個select結果集。

先看需求,直接上圖 從圖中看出,需要12條普通的SELECT語句,所以就放到儲存過程中 儲存過程如下: DROP PROCEDURE IF EXISTS proc_report; DELIMITER $ CREATE PROCEDURE proc_report( OUT d_norma

使用JDBC呼叫mysql儲存過程

多敲幾次java連線mysql,多操作一些簡單的例項,多看大神們的部落格很快就能掌握好java對資料庫的操作了。 程式碼: public static void procedure() throws ClassNotFoundException, SQLException{

python 呼叫mysql儲存過程返回結果集

儲存過程: delimiter | create procedure get_product_info(in imid int(10),int iuser varchar(20)) begin select * from tb_test where mid = i

JFinal呼叫Mysql儲存過程方法

1.首先要清楚JFinal提供了Db+Record的模式,而其中有一個方法是這樣的Db.execute(ICallback),。 2.ICallback是JFinal提供的呼叫儲存過程的介面,介面中提供了run方法,用來實現儲存過程的呼叫。 簡單描述程式碼過程 (1)我在s

【Java】如何呼叫MySQL儲存過程

Java呼叫MySQL的儲存過程,需要用JDBC連線,環境eclipse 首先檢視MySQL中的資料庫的儲存過程,接著編寫程式碼呼叫 mysql> show procedure status; +------+-------------+-----------+-

ssm框架呼叫mysql儲存過程

1.建表 /* Navicat MySQL Data Transfer Source Server : localMysql Source Server Version : 50628 Source Host : 127.0.0.1:

shell 指令碼呼叫mysql儲存過程

#!/bin/sh ## The function of the script is used to balance statistics,we get ## data from the table accseqs,after the analysis and cal

c / c + + 呼叫mysql儲存過程

E文好的請檢視原文,菜鳥級翻譯,歡迎批評指正! mysql5.0支援儲存過程後,現在mysql6.0Alpha 版本也是可用的。6.0不僅支援大型資料庫(如 oracle和如此的大多數功能(如儲存過程、檢視、觸發器、作業等,並修復了這些功能存在的bug,6.0.1 版

Hibernate呼叫SQLserver儲存過程

首先我們在sqlserver中寫一個儲存過程,也就是一個簡單的查詢。 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE my_procedure AS BEGIN SET NOCOU

mybatis呼叫mysql儲存過程返回結果集

儲存過程中經常需要返回結果集。Mysql中直接用select即可返回結果集。而oracle則需要使用遊標來返回結果集。這一點Mysql相對比較方便,如下程式碼即可實現輸出結果集: 儲存過程定義: D

Spring mvc呼叫mysql儲存過程

mysql> use modbus; Database changed mysql> DELIMITER $ mysql> drop procedure if exists p4;     -> create procedure p4()     -

jdbc呼叫mysql儲存過程,並獲得結果集合

最近碰到一個需要Java呼叫mysql儲存過程並獲得儲存過程結果集的場景. 儲存過程:spilte_result:分割字串儲存到臨時表,並返回臨時表的結果 資料庫執行結果 sum_interface_traffic_result:統計策略流量 現在使用JdbcTempl

mybatis呼叫mysql儲存過程(返回引數,單結果集,多結果集)

一、接收一個返回值 使用Map接收返回引數,output引數放在傳入的param中 建立表 DROP TABLE IF EXISTS `demo`; CREATE TABLE `demo` ( `id` int(11) NOT NULL AUTO_INCREMEN

hibernate呼叫mysql儲存過程

轉自:http://www.cnblogs.com/liuling/archive/2013/07/29/2013-7-29-01.html 在mysql中建立兩個儲存過程,如下: 1、根據id查詢某條資料: 1 CREATE PROCEDURE `findEmpB

MySql儲存過程中傳參和不傳參以及java中呼叫程式碼

資料庫表結構 1.mysql不傳參寫儲存過程 create procedure product() -- product為儲存過程名稱 begin select * from book; end 呼叫此儲存過程為 CALL product

mysql 儲存過程建立及呼叫

返回(查詢users表的條數 + 傳入的數字) CREATE DEFINER=`root`@`localhost` PROCEDURE `getcount`(OUT s INT, IN t INT) BEGIN SET @t = (SELECT COUNT(1) FROM users);

MySQL 儲存過程相互呼叫舉例

create procedure prccharges(in orderno char(6),out shippingCharges float(4,2),out wrapCharges float(4,2)) begin select mshippingc

MySQL儲存過程遞迴呼叫

          有分類表tb_system_category,結構如下: CREATE TABLE `tb_system_category` ( `id` int(11) NOT NULL AUTO_INCREMENT, `c_parent_id` int(1