如何在命令行下連接SQLServer2000

  先說一點費話吧.....

在不久以前我還是一個非彙編不玩、非C/C++不用的純微軟派的FANS,認爲只有這樣的程序員纔是懂得軟件的程序員(但坦白地說我並沒有BS過那些搞J2EE和.Net開發的同行們。),所以在我學完了JAVA的語法、做完了幾練習之後就完全拋棄了它,一直使用我引以爲榮的VC來做爲寫作平臺,即便是在一個項目中用來寫界面的代碼佔據了20%~~30%甚至更高時我也毫無怨言地接受了。

然而在現在這個金錢性社會裏,時間就是金錢,效率就是金錢,商機也是轉瞬即逝的,一切都是按低成本高效率的原則進行着。在一個項目中,可能當你還在爲用VC來使程序變得更加美觀而煞費苦心時(這簡直就不人乾的活),那些用JAVA或.Net來開的競爭對手們可能都已經完成了他們項目,這就是效率的體現,也抓住了商機。並不是VC不好,而是用它就要與底層做較多的接觸,浪費了時間,所以並不是所有的項目都可以變成你用來展示技術的平臺,這就得進行合理的估算,在一些時實性要求較高或保密性較強的時候可以用VC甚至是內聯彙編,但對於那些不太重要的(尤其是界面部分)你就應該勇敢地拿起JAVA或C#來節約時間。

所以在今天早晨8:20分時,我拿起了那本被我放置在書架上N久的《Java 2實例入門》而步入“高效“開發的行列。謝謝大家,我的費話完了(頭一偏,躲過了迎面飛來的一塊磚....好險啊!),下面就來說下正題

其實代碼是我很久以前就寫了的,當時是在用VC做一個小項目,想將數據庫的操作也加入其中,但由於不知道用VC怎麼操作,所以就用JAVA來寫了。先在數據庫中寫好了幾個存儲過程,然後用JDBC來連接,針對每一個存儲過程都寫了一個JAVA文件,而後在VC中用ShellExecte或WinExec來啓動JVM,並將編譯後的類文件作爲參數傳入,這樣就可以操作數據庫了。爲了保證JDBC的正確性,我是在JBuilder2006中作了驗證的,都可以正確執行,但一命令行下就什麼也得不到了,記得當時和一兄弟討論了很久也沒有解決,直到後來的一次偶然的操作才知道了原因:原來在JBuilder2006執行時,它會自己去搞定和數據庫的連接(這要藉助於JDBC的驅動),然而JDK的命令行卻沒有這個功能,所以即便是安裝了JDBC的驅動它也搞不定,我的解決方法是將 JDBC驅動安裝目錄/Lib目錄下的幾個.jar文件解壓後再拷貝到JAVA源文件的同目錄中,問題真的就解決了,真的可以用VC來操作數據庫了,

下面是JAVA的代碼:

//////////////////////////////////////////////////
//該類用於執行存儲過程Del_All_Info,刪除所有信息
//
//thinkSJ 2006-06-14
////////////////////////////////////////////////
/
import java.sql.*;   //導入SQL類

public class Dll_All_Info {
    
//類屬性
    String dri = "com.microsoft.jdbc.sqlserver.SQLServerDriver";  //驅動名稱
    String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433";     //連接字符串
     
   
//執行存儲過程刪除所有信息
   public boolean DeleteAll(){     
    
try {           
            
try {
            Class.forName(
this.dri);
                } 
catch (ClassNotFoundException ex1) {
                }          
          Connection con 
= DriverManager.getConnection(this.url, "sa""");            
        java.sql.CallableStatement cs 
= con.prepareCall(
                
"{call SaveInfo..Del_All_Info}");     //該存儲過程沒有返回值
        cs.execute() ;        
        con.close();                                 
//關閉連接
        return true;
    } 
catch (Exception ex) {
        ex.printStackTrace() ;        
        
return false;
    }
   }
   
    
public static void main(String[] args) {
        Dll_All_Info delAll 
= new Dll_All_Info() ;    //初使化,並連接到數據庫
        delAll.DeleteAll();                           //執行       
    }
}

 

好,再來貼一段執行有參存儲過程的代碼 :

///////////////////////////////////////////////////////////////////////
//該類用於執行存儲過程Del_From_Tab @Info_ID int ,  @Result int output
//
//thinkSJ  2006-06-15
//////////////////////////////////////////////////////////////////////
import java.sql.*;      //導入SQL類

public class Del_By_ID {
    
//類屬性
    String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";  //驅動名稱
    String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433";        //連接字符串
    private Connection con = null;             //數據庫連接
        int Info_ID ;                       //刪除的ID號
    
//構造函數
    public Del_By_ID(int id)
    {
        Open_DB(
this.driver,this.url);
        
this.Info_ID = id;           //在構造函數中指定要刪除的ID號
    }

    
//打開數據庫連接
    public boolean Open_DB(String driver, String url)  {
       
try {
           Class.forName(driver);                            
//裝載驅動(jdbc)
           con = DriverManager.getConnection(url, "sa"""); //連接數據庫
                                                             
//得到連接時,連接自動打開
           return true;
       } 
catch (Exception ex) {
           
return false;
       }
   }

   
//關閉到數據庫的連接
   public boolean Close_DB() {
        
try {
            con.close();
            
return true;
        } 
catch (SQLException ex) {
            
return false;
        }
    }

    
public int DelID(int Info_ID){
        
int nRet = 0;
        
if (Info_ID <=0)
            
return nRet;
        
try {
            java.sql.CallableStatement cs 
= this.con.prepareCall(
                    
"{call SaveInfo..Del_From_Tab(?,?)}");
            cs.setString(
1,""+Info_ID);
            cs.setString(
2,""+nRet);
            cs.execute() ;
            
return 1;
        } 
catch (SQLException ex) {
            
return 0;
        }
    }


    
public static void main(String[] args) {
            
int id = 3;
        Del_By_ID del 
= new Del_By_ID(id) ;              //新建並打連接
        int ret = del.DelID(del.Info_ID) ;         //執行並判斷返回值
        del.Close_DB() ;                                      //關閉連接
    }
}

 

下面這段代碼是用於執行有返回值的存儲過程:

/////////////////////////////////////////////////////
//用於執行存儲過程Get_All_Info
//
//thinkSJ  2006-06-15
////////////////////////////////////////////////////
/
import java.sql.*;
import java.util.ArrayList;

public class Get_Info {
    
//類屬性
    String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";  //驅動名稱
    String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433";        //連接字符串
    private Connection con = null//數據庫連接
    
//構造函數
    public Get_Info(){
        
this.Open_DB(this.driver ,this.url) ;
    }
    
//打開數據庫連接
    public boolean Open_DB(String driver, String url)  {
       
try {
           Class.forName(driver);                            
//裝載驅動(jdbc)
           con = DriverManager.getConnection(url, "sa"""); //連接數據庫
                                                             
//得到連接時,連接自動打開
           return true;
       } 
catch (Exception ex) {
           
return false;
       }
   }

   
//關閉到數據庫的連接
   public boolean Close_DB() {
        
try {
            con.close();
            
return true;
        } 
catch (SQLException ex) {
            
return false;
        }
    }
    
    
//得到信息
    public ArrayList Get_Info(){
        ResultSet rs 
= null;        //結果集
        ArrayList al = new ArrayList() ;//初使化鏈表
        try {
            java.sql.CallableStatement cs 
= this.con.prepareCall(
                    
"{call SaveInfo..Get_All_Info}");
            rs 
= cs.executeQuery() ;    
            
while (rs.next()) {
                al.add(
""+rs.getInt(1) );   //將數據保存到鏈表中
                al.add(rs.getString(2) );
                al.add(rs.getString(
3) );
            }
            rs.close() ;
        } 
catch (SQLException ex) {
            
try{
                rs.close();
            }
catch(Exception ex1){
            }
            ex.printStackTrace() ;
        }
        
return al;
    }
    

    
public static void main(String[] args) {
        Get_Info get_info 
= new Get_Info();   //新建並建立連接
        ArrayList al = new ArrayList();
        al 
= get_info.Get_Info();             //得到返回值
      for(int i =0;i < al.size();i++){
          System.out.print(al.get(i) 
+ "  ");
          i
++;
          System.out.print(al.get(i) 
+ "  ");
          i
++;
          System.out.println(al.get(i));
      }
        get_info.Close_DB() ;                
//關閉連接
    }
}

 

最後這段代碼也是用於執行有參存儲過程的:

///////////////////////////////////////////////////
//用於執行存儲過程Save_Into_Tab @a varchar(256)
//
//thinkSJ 2006-06-15
//////////////////////////////////////////////////
/
import java.sql.*;

public class Save_Info {
    
//類屬性
    String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";  //驅動名稱
    String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433";        //連接字符串
    String Infomation = null;                                      //信息
    String Date = null;                                            //日期
    private Connection con = null//數據庫連接

    
//構造函數
    public Save_Info(String s,String d){
        
this.Open_DB(this.driver ,this.url) ;
        
this.Infomation = s;   //在構造函數中指定要保存的信息
        this.Date = d;        
    }
    
//打開數據庫連接
   public boolean Open_DB(String driver, String url)  {
      
try {
          Class.forName(driver);                            
//裝載驅動(jdbc)
          con = DriverManager.getConnection(url, "sa"""); //連接數據庫
                                                            
//得到連接時,連接自動打開
          return true;
      } 
catch (Exception ex) {
          
return false;
      }
  }
   
//保存信息
  public void Save(String sInfo,String sDate){
    
try {
        java.sql.CallableStatement cs 
= this.con.prepareCall(
                
"{call SaveInfo..Save_Into_Tab(?,?)}");
        cs.setString(
1,sDate);
        cs.setString(
2,sInfo);
        cs.execute() ;
    } 
catch (SQLException ex) {
    }
  }
  
//關閉到數據庫的連接
  public boolean Close_DB() {
       
try {
           con.close();
           
return true;
       } 
catch (SQLException ex) {
           
return false;
       }
   }
   
    
public static void main(String[] args) {
        String s 
= "Tell me!";
        String d 
= "2006-06-15";
        Save_Info save_info 
= new Save_Info(s,d);    //新建並打開連接     
        save_info.Save(save_info.Infomation,save_info.Date) ;
        save_info.Close_DB() ;                  
//關閉數據庫
        
    }
}

這是咖啡館開業後的第一段JAVA代碼。

另外CSDN的BLOG好像不支持JavaScript,昨天試了很長時間都沒成功!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章