java 創建mysql代參數存儲過程和調用

         與java相比用sql語句對數據查詢結果做基礎的數據操邏輯處理有更高的效率,從而可以提升系統的運行速度,而存儲過程作爲數據操作的一個重要工具,小編以爲作爲一個經常與數據庫打交道的 java程序員有必要了解一下,存儲過程不僅可以提升查詢效率,更可以完成大部分的數據邏輯處理。特步是在數據結構設計的不好的情況下存儲過程可以大大的優化java代碼。廢話就不多說了,分享一下自己的收穫。 

            

package com.test;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.sql.DataSource;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test2 {
	   @org.junit.Test
       public void TestPc(){
		    String[] localtions={"applicationContext.xml",
		    		  "spring-mvc.xml"};
		    ApplicationContext ctx=new ClassPathXmlApplicationContext(localtions);
	        DataSource ds=(DataSource) ctx.getBean("dataSource");
	        //刪除存儲過程
	        String dpSql="DROP PROCEDURE if EXISTS javapc;";
	        //創建存儲過程
	        String cpSql="CREATE PROCEDURE  javapc(in myid VARCHAR(64)) "
	        		   + "  BEGIN"
	        		   + "  DECLARE wish_id VARCHAR(64);"//自定義參數wish_id
	        		   + "  DECLARE wish_memberid VARCHAR(64);"//自定義參數wish_memberid
	        		   + "  DECLARE wish_goodsid VARCHAR(64);"//自定義參數wish_goodsid
	        		   + "  DECLARE wish_addtime VARCHAR(64);"//自定義參數wish_goodsid
	        		   + "  DECLARE  result INT DEFAULT 0;"//自定義參數result
	        		   + "  if(EXISTS(SELECT * from tb_wish WHERE id=myid)) THEN"//判斷SELECT * from tb_wish WHERE id=myid查詢結果是否爲空
	        		   + "       SET result=0;"//將查詢到的結果給傳遞個自定義參數wish_id,wish_memberid,wish_goodsid,wish_addtime
	        		   + "       SELECT id,memberid,goods_id,addtime into wish_id,wish_memberid,wish_goodsid,wish_addtime from tb_wish WHERE id=myid  ;  "
	        		   + "  ELSE"
	        		   + "     SET result=0; "
	        		   + "  END IF; "//將結果返回由調用端讀取  返回多條記入的時候創建臨時表,把中間結果放入臨時表中最後select * from 臨時表
	        		   + "  select wish_id,wish_memberid,wish_goodsid,wish_addtime;"
	        		   + "  end";
	        //調用存儲過程
	        String cBql="call javapc(?)";
	        try {
	        	 //獲取連接
				Connection conn=ds.getConnection();
				//創建回話
				Statement cstm =conn.createStatement();
				 //刪除已存在的存儲過程
				cstm.execute(dpSql);
				//創建存儲過程
				cstm.execute(cpSql);
				 //創建可以調用存儲過程的回話
				CallableStatement cbsm= conn.prepareCall(cBql);
				//設置參數
				cbsm.setString(1, "0BB8B309-045D-48E5-BFCF-B90966D04D5D");
				//執行存儲過程
				cbsm.execute();
				//獲取結果給集
				ResultSet  rs=cbsm.executeQuery();
				//cbsm.registerOutParameter(1, java.sql.Types.INTEGER);
				while(rs.next()){
			    	   System.out.println(rs.getString("wish_id"));
			    	   System.out.println(rs.getString("wish_memberid"));
			    }
			   
	        } catch (SQLException e) {
				// TODO Auto-generated catch block
				System.out.println("創建鏈接失敗");
	        	e.printStackTrace();
			}   
	      //  System.out.println(ds);
	   }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章