本人刚接触java 数据库编程,按前辈们的提示一步步装驱动,设环境变量,可最后连一个测试程序都调不通.特在此等候大家指点.本人安装的是microsoft sql srver 2000 sp3,安装之后又从网上下载了sql server的三个驱动信息包:msbase.jar、mssqlserver.jar、msutil.jar存放在E:\lib目录.我的环境变量设置如下:
classpath C:\sun\Java\jre\lib\rt.jar;E:\lib\msbase.jar;E:\lib\mssqlserver.jar;E:\lib\msutil.jar
JAVA_HOME C:\sun\Java;
path C:\sun\Java\jdk\bin;%path%;C:\Program Files\Microsoft SQL Server\80\Tools\BINN
测试程序的代码如下:
import java.sql.*; 
public class SqlTesting { 
public static void main(String args[]) { 
String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=temp";
String user ="temp"; 
String password = "temp"; 
String sqlStr = "select CustomerID, CompanyName, ContactName from Customers"; try { 
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); 
System.out.println( "" ); Connection con = DriverManager.getConnection( url, user, password ); 
Statement st = con.createStatement(); 
ResultSet rs = st.executeQuery( sqlStr ); while(rs.next()) { 
System.out.print(rs.getString("CustomerID") + " "); 
System.out.print(rs.getString("CompanyName") + " "); 
System.out.println(rs.getString("ContactName")); 

rs.close(); 
st.close(); 
con.close(); 
} catch(Exception err) { 
err.printStackTrace(System.out); 


}
运行时的出错信息如下:D:\java\javatemp>javac SqlTesting.javaD:\java\javatemp>java SqlTesting
Exception in thread "main" java.lang.NoClassDefFoundError: SqlTesting
注:可以通过编译,但运行出错.
我用sql server的企业管理器创建了程序代码中的temp数据库,表,用户名,密码,列名均一致.请问出错原因在哪?如何解决?另外一个测试程序代码如下:
import java.sql.*;
import java.io.*;
import java.util.*;class TestDB{
public static void main(String[] args){
try{
runTest();
}
catch(SQLException ex){
while(ex!=null){
ex.printStackTrace();
ex=ex.getNextException();
}
}
catch(IOException ex){
ex.printStackTrace();
}
}

public static void runTest()throws SQLException,IOException{
Connection conn=getConnection();
try{
Statement stat=conn.createStatement();

stat.execute("CREATE TABLE Greetings(Message CHAR(20))");
stat.execute("INSERT INTO Greetings VALUES('Hello,world!')");

ResultSet result=stat.executeQuery("SELECT * FROM Greetings");
result.next();
System.out.println(result.getString(1));
stat.execute("DROP TABLE Greetings");
}
finally{
conn.close();
}
}

public static Connection getConnection()throws SQLException,IOException{
Properties props=new Properties();
FileInputStream in=new FileInputStream("database.properties");
props.load(in);
in.close();

String drivers=props.getProperty("jdbc.drivers");
if(drivers!=null)
System.setProperty("jdbc.drivers",drivers);
String u=props.getProperty("jdbc.url");
String username=props.getProperty("jdbc.username");
String password=props.getProperty("jdbc.password");

return DriverManager.getConnection(u,username,password);
}
}
环境变量和上边一样.程序中用到的database.properties文件,我是这样创建的:先创建一个.txt文件,里边写入如下内容:
jdbc.drivers=com.microsoft.jdbc.sqlserver.SQLServerDriver
jdbc.url=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=temp
jdbc.username=temp
jdbc.password=temp
然后将这个文件重命名为:database.properties.
编译后,运行出错信息如下:D:\java\corejava1>javac TestDB.javaD:\java\corejava1>java TestDB
Exception in thread "main" java.lang.NoClassDefFoundError: TestDB后来我看书上说要用java -classpath .;driverPath TestDB的方式运行,于是我用如下命令运行,结果照样出错:
D:\java\corejava1>java -classpath .;E:\lib\  TestDB
java.sql.SQLException: No suitable driver
        at java.sql.DriverManager.getConnection(DriverManager.java:545)
        at java.sql.DriverManager.getConnection(DriverManager.java:171)
        at TestDB.getConnection(TestDB.java:52)
        at TestDB.runTest(TestDB.java:22)
        at TestDB.main(TestDB.java:8)
我都无奈了,搞了一周了,愣是不知道错在哪里.从图书馆里借的java数据库书上都是用jdbc-odbc桥来做的,没有一个完整的例子可供参考,小弟在此拜托大家了!谢谢谢谢!!!!

解决方案 »

  1.   

    首先我要说的是:你的classPath在前面加".;",这是一个最普通的设置方式,表示类寻找当前目录
    NoClassDefFoundError一般是因为没有找到指定类,明显你的类已经定义,所以我认为最可能的原因是类的搜索位置有问题,建议修改一下,看看效果!
    这里简单说一下我的环境变量的设置方式
    一般
    JAVA_HOME=C:\Program Files\Java\jdk1.5.0_06(jdk安装路径,注意没有分号)
    JRE_NOME=C:\Program Files\Java\jre1.5.0_06(jre安装路径,注意没有分号)
    path=%JAVA_HOME%\bin;%path%
    CLASS_PATN=.;%JRE_HOME%\lib\rt.jar;
      

  2.   

    颜色设置有点问题,
    一定要注意CLASS_PATH中的".;"!!!!!!!!!!
      

  3.   

    怎么都喜欢在cmd下编这个,直接用jbuilder就可以了
      

  4.   

    楼上说的对,是classpath中没有加上.;的问题,
    或者是你在运行时用
    java -cp . SqlTesting 
      

  5.   

    System.setProperty("jdbc.drivers",drivers);
    不知道行不行,我都是用
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
    你可以改成Class.forName(drivers);
      

  6.   

    把msbase.jar、mssqlserver.jar、msutil.jar三个包直接引进到你的开发工具中了(eclipse)试试了我之前也是连接数据库出现了问题了现在我解决了
      

  7.   

    呵呵。你去装一个SQL Server 2000 SP4,然后再来看看。
      

  8.   

    一般 
    JAVA_HOME=C:\Program Files\Java\jdk1.5.0_06(jdk安装路径,注意没有分号) 
    JRE_NOME=C:\Program Files\Java\jre1.5.0_06(jre安装路径,注意没有分号) 
    path=%JAVA_HOME%\bin;%path% 
    CLASS_PATN=.;%JRE_HOME%\lib\rt.jar;
    你还是搞了SQL Server 2000 SP3
      最好在搞一个SQL Server 2000 SP4在来Test下
      

  9.   

    我将类路径前加上了".;",并且用eclipse导入了那三个驱动包.调试SqlTesting.java时仍然出错:
    java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
    at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
    at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
    at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
    at com.microsoft.jdbc.sqlserver.tds.TDSConnection.<init>(Unknown Source)
    at com.microsoft.jdbc.sqlserver.SQLServerImplConnection.open(Unknown Source)
    at com.microsoft.jdbc.base.BaseConnection.getNewImplConnection(Unknown Source)
    at com.microsoft.jdbc.base.BaseConnection.open(Unknown Source)
    at com.microsoft.jdbc.base.BaseDriver.connect(Unknown Source)
    at java.sql.DriverManager.getConnection(DriverManager.java:525)
    at java.sql.DriverManager.getConnection(DriverManager.java:171)
    at database.SqlTesting.main(SqlTesting.java:15)

      

  10.   

    1,lz可以先用桥驱动测试看是不是代码的问题.
    2,SP3 ,SP4 补丁 看你加了没.
    3, 看你sql服务器启动了没.
    4,看你把jar包导入工程 刷新了没.
      

  11.   

    没打补丁了(SP4)
    注意:下载下来的补丁(sp4)双击它选择安装到一个目录时是在解压,然后你还要到那个目录下双击setup.bat批处理文件才是开始安装。
    还有一点了,下载的补丁(sp4)还要与sql server2000的匹配了。如果不匹配安装就会提醒错误了。