Hibernate呼叫SQLserver儲存過程
首先我們在sqlserver中寫一個儲存過程,也就是一個簡單的查詢。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE my_procedure
AS
BEGIN
SET NOCOUNT ON;
select * from t_gj_saleorder
END
GO
根據自己表的情況,修改上面的t_gj_saleorder.
下面是java程式碼,我的是spring+hibernate框架,所以用獲取bean的方式拿到sessionFactory。
package com.smart.oo.service.trigger; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import org.apache.struts2.convention.annotation.Results; import org.apache.xbean.spring.context.ClassPathXmlApplicationContext; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.context.ApplicationContext; public class MainTest { @SuppressWarnings("deprecation") public static void main(String[] args) throws Exception { ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml"); // SyncNationOrderTrigger syncNationOrderTrigger=(SyncNationOrderTrigger) applicationContext.getBean("sessionFactory"); // syncNationOrderTrigger.syncOrder(); SessionFactory sessionFactory=(SessionFactory) applicationContext.getBean("sessionFactory"); Session session=sessionFactory.openSession(); Connection connection=session.connection(); String sql="{call my_procedure}"; CallableStatement cs=connection.prepareCall(sql); ResultSet resultSet=cs.executeQuery(); while(resultSet.next()){ System.out.println(resultSet.getString(1)+","+resultSet.getString(2)); } } }
下面我們來稍微做一下修改,做一個可以有傳入傳出引數的儲存過程:
USE [db_bboo]
GO
/****** Object: StoredProcedure [dbo].[my_procedure] Script Date: 07/08/2016 17:38:59 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[my_procedure](@id varchar(25),@test varchar(20) out)
-- Add the parameters for the stored procedure here
--<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>,
--<@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
select * from t_gj_saleorder where [email protected]
set @test='just_return'
END
然後是java程式碼:
package com.smart.oo.service.trigger; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import org.apache.struts2.convention.annotation.Results; import org.apache.xbean.spring.context.ClassPathXmlApplicationContext; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.context.ApplicationContext; public class MainTest { @SuppressWarnings("deprecation") public static void main(String[] args) throws Exception { ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml"); // SyncNationOrderTrigger syncNationOrderTrigger=(SyncNationOrderTrigger) applicationContext.getBean("sessionFactory"); // syncNationOrderTrigger.syncOrder(); SessionFactory sessionFactory=(SessionFactory) applicationContext.getBean("sessionFactory"); Session session=sessionFactory.openSession(); Connection connection=session.connection(); String sql="{call my_procedure(?,?)}"; CallableStatement cs=connection.prepareCall(sql); cs.setObject(1, "1467871443546000050"); cs.registerOutParameter(2, java.sql.Types.VARCHAR);//設定第二個引數為輸出引數 ResultSet resultSet=cs.executeQuery(); while(resultSet.next()){ System.out.println(resultSet.getString(1)+","+resultSet.getString(2)+","+resultSet.getString(3)); } String param2 = cs.getString(2);//獲取輸出引數,也就是第二個引數 System.out.println("--------"+param2+"---------"); } }
相關推薦
Hibernate呼叫SQLserver儲存過程
首先我們在sqlserver中寫一個儲存過程,也就是一個簡單的查詢。 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE my_procedure AS BEGIN SET NOCOU
mybatis 呼叫sqlserver 儲存過程
<select id="testStoredProcedure" statementType="CALLABLE" resultMap="TestMap"> <![CDATA[ {call AllNewcourse(${shopid},${cours
【mybatis】mybatis呼叫sqlserver儲存過程和表值函式
儲存過程和表值函式的區別 最簡單的區別是儲存過程是pr開頭的,而儲存過程是fn開頭的,表值函式返回的是一個表結構的結果。如果mybatis用呼叫儲存過程的方式去呼叫表值函式,就會丟擲以下的異常: exc
php呼叫sqlserver儲存過程例項,帶輸入輸出引數,經測試可用
因工作原因最近需要用到呼叫sqlserver儲存過程,並且需要輸入輸出引數,因為單純的參考網上的一些例子總有問題,最後自己解決後決定寫一寫解決的過程。並把自己寫的3個方案都放上,記錄一下自己的思路過程,經測試方案1為最優方案,效能比方案2,方案3,在10萬數量級快6倍左右。
"伺服器無法繼續該事務 3400000006"錯誤原因--JAVA呼叫SQLSERVER儲存過程時過程發生異常內部事務未提交
通過JAVA呼叫SQLSERVER儲存過程時,儲存過程內部發生了型別轉換異常,在型別轉換異常發生之前已經將事務打開了,並且在型別轉換那一行沒有采用像如下錯誤處理: if @@error<>0 then goto err e
菜鳥筆記:java呼叫sqlserver儲存過程
首先建立一個儲存過程: CREATE proc HR_PER_TARGET_SCORECHECK @PLANID varchar(20), @Obj_A0100 varchar(20), @Body
基於C#中的類SqlCommand物件呼叫SQLServer儲存過程時,儲存過程執行成功,但是物件方法ExecuteNonQuery()返回-1
問題如題。 【下面是一個例子】 1、儲存過程完成的功能是:插入insert一條記錄,相同主鍵的記錄存在時執行更新update的操作。儲存過程正常執行的返回值是1.(不過本文提到的問題和這個返回值沒關係。) 2、在另一個.cs檔案中使用 SqlCommand物件 呼叫方法Ex
spring data jpa 如何呼叫mysql儲存過程?
A:首先定義儲存過程依賴的jpa表: @Entity @Table(name="evenmngt_childthingtree_tmp")//資料庫中的表名 @Name
C#呼叫ORACLE儲存過程返回結果集
Oracle中scott使用者下建立儲存過程: (注:從9i開始有了sys_refcursor這種型別,在以前的Oracle版本中需要使用REF CURSOR,並且還需放在一個程式包中) create or replace procedure sp_getdept (result
jdbc呼叫mysql儲存過程
public static void updateMtBeginTimeIsSix() { Connection connection = null; CallableStatement cs = null; try { connection = DataSource.getI
ireport5呼叫sqlserver2005儲存過程方法
1、儲存過程準備 ALTER PROCEDURE [dbo].[portofolio_definition_get] @flag INT AS BEGIN
mybaties呼叫mysql儲存過程。儲存過程返回多個select結果集。
先看需求,直接上圖 從圖中看出,需要12條普通的SELECT語句,所以就放到儲存過程中 儲存過程如下: DROP PROCEDURE IF EXISTS proc_report; DELIMITER $ CREATE PROCEDURE proc_report( OUT d_norma
sqlserver儲存過程/遊標及例項
--系統儲存過程exec sp_databases --檢視系統資料庫exec sp_tables --檢視系統表exec sp_rename 'aaa','bbb' --修改表明aaa為bbbexec sp_rename 'dbo.aaa','col1','col2' --修改表aaa的列col1為col2
SQLSERVER儲存過程的基本語法例項
SQLSERVER儲存過程的基本語法例項 SQLSERVER儲存過程的基本語法例項 一、定義變數--簡單賦值 declare @a intset @a=5 print @a --使用select語句賦值 declare @user1 nvarchar(50) select @user1='張三'prin
sqlserver儲存過程實現資料批量刪除--分割字串實現
寫的儲存過程,接收的引數的一個字串,通過分割字串從而實現批量刪除。 IF (@operation = 'delete') BEGIN DECLARE @temp nvarchar(200) DECLARE @splitchar nvarchar(1) SET
java中呼叫Oracle儲存過程時,出現異常:java.sql.SQLException: ORA-00928: 缺失 SELECT 關鍵字(已解決)
在java中呼叫Oracle儲存過程時,出現異常:java.sql.SQLException: ORA-00928: 缺失 SELECT 關鍵字 //java程式碼 @Test public void testProcedure(){
ABAP使用AMDP呼叫HANA儲存過程
更多內容關注公眾號:SAP Technical 歡迎關注微信公眾號:SAP Technical 資料建模在SAP HANA檢視中完成,需要讀取檢視的輸出並將其保留在HANA表中。編寫儲存過程以從HANA檢視讀取資料並將資料插入HANA表。 儲存庫儲存過程'DATA_PERSIS
python呼叫oracle儲存過程
# -*- coding: utf-8 -*- import cx_Oracle conn = cx_Oracle.connect('user','pwd','tns') cursor = conn.cursor() #宣告變數 #呼叫儲存過程 sql = ''' declare result
使用JDBC呼叫mysql儲存過程
多敲幾次java連線mysql,多操作一些簡單的例項,多看大神們的部落格很快就能掌握好java對資料庫的操作了。 程式碼: public static void procedure() throws ClassNotFoundException, SQLException{
sqlserver儲存過程
儲存過程 Transact-SQL中的儲存過程,非常類似於Java語言中的方法,它可以重複呼叫。當儲存過程執行一次後,可以將語句快取中,這樣下次執行的時候直接使用快取中的語句。這樣就可以提高儲存過程的效能。 儲存過程的概念 儲存過程Procedure是一組為了完