如何在命令行下连接SQLServer2000

来源:互联网 发布:软件设计方案 评审 编辑:程序博客网 时间:2024/05/20 04:32

  先说一点费话吧.....

在不久以前我还是一个非汇编不玩、非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,昨天试了很长时间都没成功!

原创粉丝点击