java中呼叫儲存過程或函式
阿新 • • 發佈:2020-09-06
1.呼叫函式
CallableStatement cs=con.prepareCall("{?=call get_pname(?,?,?)}");
第一個?表示返回的值,後面的?可以是輸入引數,也可以是輸出引數。
第一個?是返回引數,所以必須有語句:
connection.registerOutParameter(1, Types.VARCHAR);(Types.varchar是型別)
後面的?如果是輸出引數,應該也加上registerOutParameter語句:
connection.registerOutParameter(2, Types.VARCHAR);(2是第2個佔位符,Types.varchar是型別)
System.out.println(cs.getString(1)); (1是對應輸出引數,第一個輸出引數)
2.呼叫儲存過程
CallableStatement cs=con.prepareCall("{call stu_pro(?,?,?)}");(與函式的區別是:沒有?=)
java程式中要列印呼叫過程獲得的值,需呼叫有輸出引數的儲存過程,用法和呼叫函式一樣。
package com.dgy.app; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Types;public class OraclePro { /** * 連線資料庫 */ public static Connection getConnection(){ Connection con = null; try { Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@PC-200911181406:1521:dgy"; String user= "dwj"; String pwd = "dwj"; con = DriverManager.getConnection(url,user,pwd); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return con; } public static void main(String[] args) throws SQLException { //System.out.println(OraclePro.getConnection()); Connection con=OraclePro.getConnection(); CallableStatement cs=con.prepareCall("{?=call get_pname}");//沒有引數的函式 cs.registerOutParameter(1, Types.VARCHAR);//第一個佔位為輸出,型別是varchar cs.execute(); //不能忘記execute() System.out.println(cs.getString(1)); //列印輸出結果,對應registerOutParameter } }
//有1個輸入引數的函式 CallableStatement cs=con.prepareCall("{?=call get_pname1(?)}"); cs.registerOutParameter(1, Types.VARCHAR); cs.setLong(2,25); //輸入引數是25 cs.execute(); //有1個輸出引數的函式 CallableStatement cs=con.prepareCall("{?=call get_pname2(?)}"); cs.registerOutParameter(1, Types.VARCHAR); cs.registerOutParameter(2, Types.VARCHAR); cs.execute(); System.out.println(cs.getString(1)); System.out.println(cs.getString(2)); //上面兩個結果一樣,因為兩個意思是一樣的 //1個輸入引數,1個輸出引數 CallableStatement cs=con.prepareCall("{?=call get_pname3(?,?)}"); //第1個是返回值,第2個是輸入引數,第3個是輸出引數 cs.registerOutParameter(1, Types.VARCHAR); cs.setLong(2, 25); cs.registerOutParameter(3, Types.VARCHAR); cs.execute(); System.out.println(cs.getString(1)); System.out.println(cs.getString(3));
呼叫儲存過程與呼叫函式的方法一樣,就只是con.prepareCall("{call procedure(?,?)}")沒有?=。