1. 程式人生 > >java資料庫程式設計(6) 使用儲存過程

java資料庫程式設計(6) 使用儲存過程

  1. 可以使用下面這樣的sql語句建立一個儲存過程
    mysql> delimiter //
    mysql> create procedure PTest(a int, b int, out sum int)
        -> begin
        -> set sum = a + b;
        -> end;
        -> //

     

  2. 在java中呼叫儲存過程使用的是CallableStatement,它是通過Connection的preparedCall()方法來建立的,它在建立的時候需要傳入呼叫的的sql語句。

  3. CallableStatement呼叫sql語句的時候有固定的格式,{call 過程名(?,?,?...)}這些問號是作為引數在下文中傳入的。

  4. 具體的講解穿插在程式碼中

    import javafx.animation.KeyValue;
    
    import java.io.FileInputStream;
    import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.Types;
    import java.util.Properties;
    
    public class CallableStatementTest {
        
    //    這些都是常規操作了,就不講解了。
        private String driver;
        private String url;
        private String user;
        private String pass;
    
        public void initParam(String paramFile) throws Exception{
            Properties properties = new Properties();
            properties.load(new FileInputStream(paramFile));
            driver =  properties.getProperty("driver");
            url = properties.getProperty("url");
            user = properties.getProperty("user");
            pass = properties.getProperty("pass");
        }
    
        public void callProcedure() throws Exception{
            Class.forName(driver);
            try(
                    Connection connection  = DriverManager.getConnection(url, user, pass);
                    
                    CallableStatement cstmt = connection.prepareCall("{call PTest(?, ?, ?)}"))
    //                這一句就是建立CallableStatement物件了,在建立的時候就傳入了對應的sql語句,意思是呼叫一個名字為
    //                PTest,具有三個引數的儲存過程。
                    
            {
    //            這裡就是設定引數了,將第一個引數設定為4,第二個引數設定為5
                cstmt.setInt(1,4);
                cstmt.setInt(2,5);
                
                cstmt.registerOutParameter(3, Types.INTEGER);
    //            這一句的意思是註冊第三個引數的型別是int
                
                cstmt.execute();
    //            執行儲存過程
                
                System.out.println("執行結果是" + cstmt.getInt(3));
    //            這一句是得到第三個引數,其型別為int
            }
        }
    
        public static void main(String args[]) throws  Exception{
            CallableStatementTest ct = new CallableStatementTest();
            ct.initParam("mysql.ini");
            ct.callProcedure();
        }
    }
    //執行程式,得到以下輸出
    //    執行結果是9