與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);
}
}