java資料庫程式設計(6) 使用儲存過程
阿新 • • 發佈:2018-12-02
- 可以使用下面這樣的sql語句建立一個儲存過程
mysql> delimiter // mysql> create procedure PTest(a int, b int, out sum int) -> begin -> set sum = a + b; -> end; -> //
-
在java中呼叫儲存過程使用的是CallableStatement,它是通過Connection的preparedCall()方法來建立的,它在建立的時候需要傳入呼叫的的sql語句。
-
CallableStatement呼叫sql語句的時候有固定的格式,{call 過程名(?,?,?...)}這些問號是作為引數在下文中傳入的。
-
具體的講解穿插在程式碼中
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