1. 程式人生 > >Java中呼叫sqlServer的儲存過程(CallableStatement)的幾種簡單情況

Java中呼叫sqlServer的儲存過程(CallableStatement)的幾種簡單情況

一、呼叫不帶引數的儲存過程

--建立儲存過程
create procedure testselect as
begin
	select bno from book;
end
package com.nc.dao;

import java.sql.*;
public class testCall {
    public static  void main(String[] args){

        Connection connection = JDBCUtil.getConn();
        String sql = "{call testselect}";
        try {
            // 建立資料庫的連線
            CallableStatement cstmt = connection.prepareCall(sql);
            // 查詢
            ResultSet rs = cstmt.executeQuery();
            while(rs.next()){
                System.out.println(rs.getString(1));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}

對比資料庫查詢結果

二、呼叫帶引數的儲存過程

// 帶引數
create procedure testselect @bno char(12)
as
begin
	select bno from book where bno = @bno
end
package com.nc.dao;

import java.sql.*;
public class testCall {
    public static  void main(String[] args){

        Connection connection = JDBCUtil.getConn();
        String sql = "{call testselect(?)}";
        try {
            // 建立資料庫的連線
            CallableStatement cstmt = connection.prepareCall(sql);
            cstmt.setString(1, "0000001");
            // 查詢
            ResultSet rs = cstmt.executeQuery();
            while(rs.next()){
                System.out.println(rs.getString(1));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}

對比資料庫查詢結果

三、帶輸出引數的儲存過程

go
create procedure testselect @bno char(12), @result char(12) output
as
begin
	select @result = bno from book where bno = @bno
end
go
package com.nc.dao;

import java.sql.*;
public class testCall {
    public static  void main(String[] args){

        Connection connection = JDBCUtil.getConn();
        String sql = "{call testselect(?, ?)}";
        try {
            // 建立資料庫的連線
            CallableStatement cstmt = connection.prepareCall(sql);
            // 按照索引設定引數
//            cstmt.setString(1, "0000001");
            // 將名為 parameterName 的引數註冊為 JDBC 型別 sqlType。
//            cstmt.registerOutParameter(2, Types.CHAR);
            // 按引數名折設定引數
           cstmt.setString("bno", "0000001");
           // 將名為 parameterName 的引數註冊為 JDBC 型別 sqlType。
           cstmt.registerOutParameter("result", Types.CHAR);
            cstmt.execute();
            // 引數索引必須與call的引數位置一致
            System.out.println(cstmt.getString(2));
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}

對比資料庫查詢結果