本篇演示如何編寫帶輸入參數的存儲過程實現數據新增,並在 Java 中通過 CallableStatement 設置參數、執行調用,最後驗證數據是否入庫。
create procedure InsertPro
@StuID int,
@StuName varchar(10),
@StuAddress varchar(20)
as
insert into 學生基本信息表 values(@StuID, @StuName, @StuAddress)
import java.sql.*;
public class ProcedureTest {
public static void main(String args[]) throws Exception {
// 加載驅動
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
// 獲取連接
Connection conn = DriverManager.getConnection("jdbc:odbc:mydata", "sa", "");
// 1. 準備調用新增存儲過程
CallableStatement c = conn.prepareCall("{call InsertPro(?,?,?)}");
// 2. 設置輸入參數 (索引從 1 開始)
c.setInt(1, 6);
c.setString(2, "Liu");
c.setString(3, "wuhan");
// 3. 執行更新
c.execute();
// 4. 驗證:調用查詢存儲過程 selePro
c = conn.prepareCall("{call selePro}");
ResultSet rs = c.executeQuery();
while (rs.next()) {
String stuid = rs.getString("StuID");
String name = rs.getString("StuName");
String address = rs.getString("StuAddress");
System.out.println(stuid + " " + name + " " + address);
}
c.close();
conn.close();
}
}
{call InsertPro(?,?,?)} 中的 ? 對應存儲過程定義的輸入參數順序。setInt、setString 等按索引設置參數值,索引從 1 開始。execute();若確定是 DML 也可用 executeUpdate()。selePro 確認數據落庫。conn.setAutoCommit(false))。