如何在命令行下连接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,昨天试了很长时间都没成功!

你可能感兴趣的:(所有文章)