sql server 存儲過程 以及java如何使用存儲過程


Sql 語句

有一個test_table1表  他有兩個字段  ID 和name

proc是procedure的縮寫 也就是存儲過程,StuProc2為創建的存儲過程名稱

執行以下創建存儲后會在Sql 數據庫生成存儲過程

 

create proc StuProc2
as
begin
select * from test_table1;
end
go

 調用存儲過程(這是無參的):exec StuProc2

創建一個帶參的存儲過程  @跟上參數名 和類型   返回參數多一個 output

 

create proc StuProc1

@sname varchar(100),@count int output
as 
begin
select @count=count(ID) from test_table1 where name=@sname ;
end
go

調用有參存儲過程:exec StuProc1 '字符串參數'  (字符串需要有引號)

 

java 調用,需要用到JDBC連接數據庫並創建Connection

package com.bowei.utl;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JdbcUtl {
    // 數據庫驅動
    private static String Driver = "";
    // 數據庫地址
    private static String url = "";
    // 數據庫用戶名
    private static String userName = "";
    // 數據庫密碼
    private static String password = "";
    static {
        Properties p = new Properties();
        try {
            // 通過相對路徑加載文件
            p.load(new FileInputStream(new File("sof/jdbc.properties")));
            // 用getProperty方法通過關鍵字獲取信息
            Driver = p.getProperty("Driver");
            url = p.getProperty("url");
            userName = p.getProperty("userName");
            password = p.getProperty("password");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static String getDriver() {
        return Driver;
    }

    public static void setDriver(String driver) {
        Driver = driver;
    }

    public static String getUrl() {
        return url;
    }

    public static void setUrl(String url) {
        JdbcUtl.url = url;
    }

    public static String getUserName() {
        return userName;
    }

    public static void setUserName(String userName) {
        JdbcUtl.userName = userName;
    }

    public static String getPassword() {
        return password;
    }

    public static void setPassword(String password) {
        JdbcUtl.password = password;
    }

    // 獲取數據庫連接
    public static Connection getConn() {
        Connection conn = null;
        try {
            // 加載驅動
            Class.forName(Driver);
            // 獲取數據庫連接
            conn = DriverManager.getConnection(url, userName, password);

        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return conn;
    }

    // 關閉數據庫資源
    public static void closeAll(ResultSet rs, Statement stat, Connection conn) {
        /* 分別按順序關閉數據庫的結果集資源,Statement 對象資源以及Connection 連接數據庫對象 */
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (stat != null) {
            try {
                stat.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

    }
}

JDBC內容:

Driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://192.168.33.170;DatabaseName=test
userName=xxzx
password=xxzx

package cunChuGuoCheng;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.bowei.utl.JdbcUtl;

public class cunChu {
    /**
     * 帶參的存儲過程  返回一個int類型的值
     * */
    public void daican(){
        try{
            Connection conn = JdbcUtl.getConn();
            CallableStatement c=conn.prepareCall("{call StuProc1(?,?)}");//調用帶參的存儲過程
            //給存儲過程的參數設置值
            c.setString(1,"測試");   //將第一個參數的值設置成測試
            c.registerOutParameter(2,java.sql.Types.INTEGER);//第二個是返回參數  返回未Integer類型
            //執行存儲過程
            c.execute();
            System.out.println (c.getInt(2));//打印返回參數
            conn.close();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    /**
     * 這個是直接返回查詢所有的結果
     * */
   public void query(){
       try{
           Connection conn = JdbcUtl.getConn();
            CallableStatement c=conn.prepareCall("{call StuProc2}");//這兒調用了查詢所有的存儲過程
             ResultSet rs=c.executeQuery();
             System.out.println ("學號:"+"     "+"姓名:");
             while(rs.next())
             {
             int Stu=rs.getInt("ID");
             String name=rs.getString("name");
             System.out.println (Stu+"     "+name+"   ");
             }
             c.close();
        }catch(Exception e){
            e.printStackTrace();
        }
   }
    public static void main(String[] args) throws SQLException {
        cunChu cun=new cunChu();
        //cun.daican();//帶參的存儲過程
        cun.query();//返回查詢所有的存儲過程

    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM