Java基礎知識:Java中調用存儲過程或函數2
}
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
}
}
[java]
//有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(?,?)}")沒有?=.