jtds的驱动的问题

89 views
Skip to first unread message

ilove...@sohu.com

unread,
Oct 8, 2007, 6:34:05 AM10/8/07
to 宏宇网络工作室
在官网上下载了jtds-1.2.2-src.zip,jtds-1.2.2-dist.zip之后,找到jtds-1.2.2.jar,把它放到了
tomcat下的common\lib,后来在大伟前辈的指点下,eclipse建设工程的时候也加了这个Jar包。测试数据库的时候还是提示找不到驱
动,请看。
java.lang.ClassNotFoundException: net.sourceforge.jtds.jdbc.Driver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at Connect.getConnection(Connect.java:24)
at Connect.displayDbProperties(Connect.java:42)
at Connect.main(Connect.java:78)
Error Trace in getConnection() : net.sourceforge.jtds.jdbc.Driver
Error: No active Connection


SQL开着,打了SP3补丁,1433端口也打开了。防火墙关闭了,TCP/IP协议也在,实在不明白怎么就是找不到驱动。

测试数据库的代码是这样的
import java.*;
public class Connect{
private java.sql.Connection con = null;
private final String url = "jdbc:jtds:sqlserver://";
private final String serverName= "localhost";
private final String portNumber = "1433";
private final String databaseName= "pubs";
private final String userName = "sa";
private final String password = "";
// Informs the driver to use server a side-cursor,
// which permits more than one active statement
// on a connection.
private final String selectMethod = "cursor";

// Constructor
public Connect(){}

private String getConnectionUrl(){
return url+serverName+":"+portNumber
+";databaseName="+databaseName+";selectMethod="+selectMethod+";";
}

private java.sql.Connection getConnection(){
try{
Class.forName("net.sourceforge.jtds.jdbc.Driver");
con =
java.sql.DriverManager.getConnection(getConnectionUrl(),userName,password);
if(con!=null) System.out.println("Connection
Successful!");
}catch(Exception e){
e.printStackTrace();
System.out.println("Error Trace in getConnection() : "
+ e.getMessage());
}
return con;
}

/*
Display the driver properties, database details
*/

public void displayDbProperties(){
java.sql.DatabaseMetaData dm = null;
java.sql.ResultSet rs = null;
try{
con= this.getConnection();
if(con!=null){
dm = con.getMetaData();
System.out.println("Driver Information");
System.out.println("\tDriver Name: "+
dm.getDriverName());
System.out.println("\tDriver Version: "+
dm.getDriverVersion ());
System.out.println("\nDatabase Information ");
System.out.println("\tDatabase Name: "+
dm.getDatabaseProductName());
System.out.println("\tDatabase Version: "+
dm.getDatabaseProductVersion());
System.out.println("Avalilable Catalogs ");
rs = dm.getCatalogs();
while(rs.next()){
System.out.println("\tcatalog: "+
rs.getString(1));
}
rs.close();
rs = null;
closeConnection();
}else System.out.println("Error: No active
Connection");
}catch(Exception e){
e.printStackTrace();
}
dm=null;
}

private void closeConnection(){
try{
if(con!=null)
con.close();
con=null;
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception
{
Connect myDbTest = new Connect();
myDbTest.displayDbProperties();
}
}

Samael Cui

unread,
Oct 8, 2007, 8:49:20 PM10/8/07
to craz...@googlegroups.com
找不到驱动和找不到类的异常是一样的,都是由于驱动包没有出现在运行环境的classpath中。跟数据库的端口没关系,如果是端口没有打开而驱动正常的话,是报的sql的异常,提示链接被拒绝。

这里顺便说一下类路径的问题,在一般jdk或jre的环境下,是使用系统环境变量中的classpath设置的类路径来查找jar包的。在tomcat运行环境下,是先查找当前目录下的WEB-INF/lib目录中的jar包;然后再查找上级目录里面的WEB-INF/lib目录中的jar包,一直查找到应用根目录的WEB-INF/lib目录中的jar包;然后再查找$CATALINA_HOME/common/lib目录下的jar包;然后再查找系统环境变量设置的classpath。如果都找不到的话,就会报ClassNotFoundException。这个异常也很好理解,就是class(类)没有找到的异常。

如果在ide开发工具中,则需要配置开发工具的构建路径。在elcipse中,需要在buildpath中导入相应的jar包。

如果是在eclipse中报这个错误,那就要看看代码所在工程的buildpath中是否导入了jtds的包。如果是在tomcat中测试的,则要看看是不是在当前运行的tomcat的common/lib目录中有相应的包。

狂刀客

unread,
Oct 11, 2007, 1:45:54 AM10/11/07
to 宏宇网络工作室
将jtds的Jar包路径写到了classpath中(在大伟叔叔提示下) ,在 Dos环境下测试的代码,可还是报了了没有找到main类的错误。
额,用jtds-1.2.2和用jtds-1.2没关系的吧。

驱动的版本没有什么关系。这个两个版本都可以用。
在dos下执行java程序的时候,调用的java类里面必须有一个public的main方法:
public void main(String[] args){
//在这里实例化当前类对象,然后传递参数,调用相应的入口方法等等操作
}

你的这个错误是因为没有main方法,还没有到调用jdbc驱动的地方。

の心╆メ儿ω

unread,
Oct 11, 2007, 5:55:51 AM10/11/07
to 宏宇网络工作室
恩 恩 问题已经解决了 昨天晚上在宿舍的电脑数据库能连上了,可是今天到工作室,那些在宿舍进行的配置都配置好了 可是还是报错了,报的错如下:

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\dong1>d:

D:\>javac DatabaseConn.java

D:\>java DatabaseConn
java.sql.SQLException: 用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接相关联

at
net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.j
ava:365)
at
net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2781)
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:
2224)
at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:599)
at
net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java
:331)
at
net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java
:50)
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:178)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at DatabaseConn.main(DatabaseConn.java:18)

D:\>

然后我们的数据库都没有设密码什么的。不知道怎么回事哦。

Samael Cui

unread,
Oct 11, 2007, 7:13:59 AM10/11/07
to craz...@googlegroups.com
这个一般有几个个可能:
  1. 数据库没有启动
  2. 数据库连接地址不正确
  3. 数据库端口不正确或者数据库端口没有开放
  4. 密码不正确
很有可能是数据库端口没有开放,在xp的sp2以后版本和2003,都要打sqlserver的sp3以后的补丁才行。

具体的,你可以使用cmd命令行,用netstat -an查询一下当前监听的端口,看看是不是有1433。如果1433没有,则说明数据库没有启动;或者没有打补丁,端口没有开放;或者是改成其它端口了,这个一般不常见,除非你们有人改过。


在07-10-11,の心╆メ儿ω <houlix...@hotmail.com> 写道:
恩 恩 问题已经解决了 昨天晚上在宿舍的电脑数据库能连上了,可是今天到工作室,那些在宿舍进行的配置都配置好了 可是还是报错了,报的错如下:

Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\dong1>d:

D:\>javac DatabaseConn.java

D:\>java DatabaseConn
java.sql.SQLException: 用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接相关联

        at
net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.j
ava:365)
        at
net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2781)
        at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:
2224)
        at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:599)
        at
net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java
:331)
        at
net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java
:50)
        at net.sourceforge.jtds.jdbc.Driver.connect (Driver.java:178)
Reply all
Reply to author
Forward
0 new messages