如何在命令行下连接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,昨天试了很长时间都没成功!
- 如何在命令行下连接SQLServer2000
- 在Red hat Linux下通过ODBC连接SQLServer2000
- 在Linux下使用perl通过unixODBC连接SQLServer2000
- 在Red hat Linux下通过ODBC连接SQLServer2000
- JBuilder2006如何连接sqlserver2000数据库
- 如何在命令行下更改ip地址
- 如何在命令行下编译C++程序
- linux如何在命令行下设置上网
- 如何在命令行下编译C++程序
- 如何在IDEA下输入命令行参数
- 在windows下如何右键进入命令行
- 连接SQLServer2000
- 如何在SQLSERVER2000中删除系统文件?
- 在WINXP下安装SQLSERVER2000的办法
- Windows下如何使用命令行来配置iSCSI连接
- 如何在windows下像在linux使用命令行
- 如何在命令行下编译创建VC程序
- 如何在命令行下编译创建VC程序
- 看动画片日语必学50句
- 14 一个求点的类
- .NET2.0 部分范例
- 常用日语口语
- C++ 16 拷贝字符串
- 如何在命令行下连接SQLServer2000
- 找工作难啊
- 关于编程修养
- 设计模式之Flyweight享元模式
- 确保页面不被嵌入框架和不被弹出的脚本
- blog
- 中国的Jolt大奖网络投票开始及阶段性总结
- 设计模式与泡mm的关系之flyweight享元模式及享元模式的再思考
- 古歌