java中jdbc呼叫儲存過程
阿新 • • 發佈:2019-02-08
儲存過程具有高效,安全,方便快捷等特點,一直深受廣大程式設計者的喜愛,Jdbc也為我們提供了與儲存過程打交道的通道。通過CallableStatement我們可以呼叫儲存過程。
可以呼叫無引數,有輸入引數和輸出引數的儲存過程。
1.呼叫無參儲存過程
CREATE DEFINER=`root`@`localhost` PROCEDURE `SkusProc`()
BEGIN
SELECT
skucode,
skuname
FROM
skus ;
END
private static Connection createCon() { try { Class.forName(driver); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } //classLoader,載入對應驅動 try { conn = (Connection) DriverManager.getConnection(url, username, pwd); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return conn; }
//呼叫無引數儲存過程 public List<skus> GetNoParaSkuList() { List<skus> list=new ArrayList<skus>(); conn=createCon(); CallableStatement cs=null;//使用CallableStatement呼叫儲存過程 try { cs=(CallableStatement) conn.prepareCall("CALL `SkusProc`"); ResultSet resultSet=cs.executeQuery(); while(resultSet.next()) { skus sku=new skus(); sku.setSkuCode(resultSet.getString("skucode")); sku.setSkuName(resultSet.getString("skuname")); list.add(sku); } cs.close(); conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }; return list; }
2.呼叫有參儲存過程
有參儲存過程包括輸入引數和輸出引數
CREATE DEFINER=`root`@`localhost` PROCEDURE `GetSkuCountProc`(IN categoryId INT, OUT count_num INT )
BEGIN
SELECT COUNT(0) INTO count_num FROM skus s INNER JOIN category c ON s.categoryid=c.id
WHERE c.Id=categoryId;
END
如果有輸出引數,我們要使用registerOutParameter進行註冊。然後使用getInt獲取返回值//呼叫有引數的儲存過程 public int GetParaSkuList(int categoryID) { conn=createCon(); CallableStatement cs=null;//使用CallableStatement呼叫儲存過程 try { cs=(CallableStatement) conn.prepareCall("CALL GetSkuCountProc(?,?)"); cs.setInt(1,categoryID); cs.registerOutParameter(2, Types.INTEGER);//註冊輸出引數 cs.execute(); int result=cs.getInt(2);//獲取輸出引數值 cs.close(); conn.close(); return result; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }; return 0; }
//呼叫無引數儲存過程
List<skus> list=dao.GetNoParaSkuList();
for(skus sku:list)
{
System.out.println(sku.getSkuCode()+"--"+sku.getSkuName());
}
//呼叫有引數儲存過程
int result=dao.GetParaSkuList(6);
System.out.println(result);