天天看點

JDBC調用存儲過程,以及存儲過程 事務的使用.....

在JDBC中調用存儲過程 首先就要在資料庫中存在 要調用的過程  ,存儲過程是一組SQL語句的集合,我們吧實作某一功能的 SQL語句集合在一起來使用,友善了使用者,不光是這樣,存儲過程可以預編譯,也就是說隻要調用了一次存儲過程,那麼下次在調用存儲過程的時候 就不需要進行再次編譯了  。提高了 資料庫通路的效率 。。

在 SQL  SERVER20008  中建立存儲過程    文法如下 

      Create   Procedure   過程名字(@parameter1  int ,@parameter2  char(10) .........)    as       <SQL指令> 

     例子: 

    Create  Procedure  a  as  select  *  from  info   //  建立了存儲過程 a  表示查詢 info表的所有資料     

  在 JDBC中調用   方法   。。。

       Connection  c =DriverManager.getConnection("jdbc:odbc:datasoure") ;  //連接配接資料庫 

       CallableStatement  m=c.prepareCalle("call p(?,?)") ;  //建立CallableStatement對象  并傳遞存儲過程調用 的SQL執行語句    ?表示 JDBC存儲過程參數的通用格式

      m.setString(1,"one"); 

     m.setString(2."two");  //分别設定第一個參數?和第二個參數?的值 

     然後調用  m.executeUpdate() ;//執行存儲過程  

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

   在JDBC操作中 我們還記得  Connection的 commit方法 嗎?   這個方法 是送出SQL指令 ,預設狀态下是自動送出  .也就是說 不用我們 顯示的去調用這個方法來送出SQL命 令  。 

   在一般的  SQL  查詢 更新删除 等操作的時候 我們不用去設定它的狀态,自動送出就行 。但是在事務中,我們不得不用到 commit方法手動送出 ,關于什麼事務 下面我詳細說   明  .... 

       事務?其實就是幾個SQL語句的組合 ,但是這個組合有特性 ,就是他們有原子性?什麼是原子性呢 ,就是 事務中的 SQL操作要麼都執行 ,要麼 一個也不執行 ,這就是事務的概念 ,  什麼時候用到事務呢 ,比如說 我們 在處理銀行轉賬服務的同時 是一個賬号 扣錢  一個賬戶加錢, 這兩個操作隻能同時進行 ,但卻不能一個執行而另一個不執行,事務的用處在銀行轉賬得到了很好的展現。。。。。。

事務的處理 我們就不能用自動送出模式了 ,

                1、我們需要調用  Connection類的  setAutoCommit(false)方法設定模式為手動送出,設定了這個模式之後我們調用 executeUpdate等方法執行的SQL指令都不會送出

               除非我們顯示調用了Connection類的 commit()方法 。

                2、如果在事務處理當中 某一條件不符合的時候 我們就可以調用  Connection類的 rollBack()函數復原事務  ,取消之前所作的一切事務操作 ,