Java呼叫儲存過程(帶輸出引數)

zhangqiang12發表於2008-04-22

     上星期老師佈置實驗,題目中有一個要求用Java來呼叫儲存過程。為了完成作業,在網上差了好些資料還看過視訊,現在終於有點眉目了。以為自己找的有點辛苦,想必其他人也會如此,因此想把自己程式設計的經驗和大家一塊分享。我也是初次使用java呼叫儲存過程,有什麼不對的地方還請大家指教,我在此謝過了。

java 程式設計工具使用myeclipse

資料庫使用sql server 2005

儲存過程

create proc denglu
  @name char(20),
  @pwd char(20),
  @msg char(30) output
as
  if exists(select * from user_table where Login_name = @name)
  begin
     if exists(select * from user_table where Login_name = @name and password = @pwd)
        set @msg = '使用者名稱與密碼都正確,登陸成功'
     else
        set @msg ='密碼錯誤,請重新輸入'
  end
  else
     set @msg = '使用者名稱不正確,請重新輸入'

java 程式碼 

package world;
import java.sql.*;

public class Sql {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO 自動生成方法存根
  
  
  String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
  
  String url = "jdbc:sqlserver://localhost:1433;databaseName=hystu";
  
  Connection conn = null;
  
  //Statement stmt = null;
  
  try{
   
   Class.forName(driver);
   conn = DriverManager.getConnection(url, user_name,password)
   if(conn != null ){
    
    System.out.println("成功連線JDBC資料庫");
    
   }
  }catch(Exception ex){
   ex.printStackTrace();
  }
  

  // 3、運算元據庫
  // 通過Connection物件例項化Statement物件
  
  String name = "stu1";//輸入的引數 1
  String pwd = "111";//輸入的引數 2
  CallableStatement call = null;

  /*用‘?‘表示引數*/
  String sql = "{ call denglu(?,?,?)}" ;
  try
  {
   //Statement stmt = conn.createStatement() ;
   // 為sql變數賦值
   // 插入語句
   call = conn.prepareCall(sql);
   call.registerOutParameter(3, java.sql.Types.VARCHAR);//要向外輸出的引數,types.varchar表示輸出的引數是字串型別或是字元型
   call.setString(1, name);//輸入第一個引數
   call.setString(2, pwd);//輸入第二個引數
   call.execute();//執行
   System.out.println(call.getString(3));//輸出要輸出的引數
   call.close();

  }
  catch(Exception e)
  {
   System.out.println("運算元據庫失敗!!!") ;
  }


  
  try{
   
   conn.close();
  }catch(Exception ex){
   ex.printStackTrace();
  }

 }

}

相關文章