说实话也是解决得有点突然。今天下午放学回家,看了看回帖,其中一位网友说到除了要放在ext这个目录里外还要在编译器里面把包导入,我照这个方法做后果然可以了,然后在命令行运行也成功了。
说来也奇怪,以前我试过在命令行运行似乎不行的,而且用jCreator导入包的时候又有点诡异,最初是死活也找不到我放在ext目录里的三个jdbc驱动的包,但资源管理器里面确实可以清楚看到我已经把包复制到里面了,然后又是不知道怎么地反复操作了几次又突然看到了三个包并导入了。不知道是不是jvm的问题。
然后就万事大吉了,终于可以连接成功。
不过唯一一个问题还没明确的解决,也就是用修改环境变量的方法还是不能成功,修改为CLASSPATH=.;C:/driver/msbase.jar;C:/driver/mssqlserver.jar;C:/driver/msutil.jar后,在命令行运行时还是不能找到类,看来还是暂时要把驱动放在/……/jdk/jre/lib/ext这里。
或者另外一个方法是用编辑器例如jCreator直接导入C:/driver里面的包也行,这样就不必再把包放进jdk里面的目录;
而用jdbc连sqlserver的时候还有一个需要注意的是,用户登录的问题,当然前提是sqlserver设置为混合登录模式,而登录的用户一定要具有对所定应数据库有对应操作的权限时才能正常管理。
不然的话会出现“jdbc对象名无效”这个异常,一般如果用sa登录时就会有这个问题出现
最后补充一下就是相关的补丁一定要打齐,sqlserver2000的sp4,还有jdbc的sp3都打上就万无一失
最后把我测试的两个程序贴出来留个底
jdbc直接连接sqlserver2000
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.PreparedStatement;
public class Jdbctest
{
protected Jdbctest()
{
}
public static void main(String [] args)
{
try
{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
System.out.println("testing");
}
catch(ClassNotFoundException ce)
{
System.out.println(ce);
}
try
{
String url="jdbc:microsoft:sqlserver://localhost:1433;databassName=frends;";
Connection con=DriverManager.getConnection(url,"test","1111");
if(con!=null)
{
System.out.println("连接成功");
}
Statement s=con.createStatement();
/*
String sql="select * from friends";
PreparedStatement pstmt=con.prepareStatement(sql);
ResultSet rs=pstmt.executeQuery();
*/
ResultSet rs=s.executeQuery("select * from friends");
while(rs.next())
{
System.out.print(rs.getString(1)+"/t");
System.out.print(rs.getString(2)+"/t");
System.out.print(rs.getInt(3)+"/t");
System.out.print(rs.getDate(4)+"/t");
System.out.print(rs.getInt(5)+"/t");
System.out.println(" ");
}
rs.close();
s.close();
}
catch(SQLException ce)
{
System.out.println(ce);
}
}
}
其中test为自定义的一个超级用户
JdbcOdbc桥接
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
public class jdbcOdbcTest
{
protected jdbcOdbcTest(){}
public static void main(String [] args)
{
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException ce)
{
System.out.println(ce);
}
try
{
String url="jdbc:odbc:test";
Connection con=DriverManager.getConnection(url);
Statement s=con.createStatement();
ResultSet rs=s.executeQuery("select * from friends");
while(rs.next())
{
System.out.print(rs.getString(1)+"/t");
System.out.print(rs.getString(2)+"/t");
System.out.print(rs.getInt(3)+"/t");
System.out.print(rs.getDate(4)+"/t");
System.out.print(rs.getInt(5)+"/t");
System.out.println(" ");
}
rs.close();
s.close();
}
catch(SQLException ce)
{
System.out.println(ce);
}
}
}
其中test为系统DNS