【问题标题】:ClassNotFoundException when trying to connect to SQL server 2005 with Java尝试使用 Java 连接到 SQL Server 2005 时出现 ClassNotFoundException
【发布时间】:2025-12-24 09:20:13
【问题描述】:

我对数据库管理相当陌生。我只是想连接到数据库并在命令提示符下检索并显示一个表。数据库不在我的电脑上。我相当肯定网址是问题所在。代码:

import java.io.*;
import java.sql.*;

class transfer{

//driver and DB URLs
final static String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
final static String DB_SQL = "jdbc:microsoft:sqlserver://localhost:1433;" + "database=DataDB;" + "user=sa;" + "password=1234";

//Database Username and password
final static String user1 = "sa";
final static String pass1 = "1234";

static ResultSet rs;        
public static void main(String args[]) throws SQLException, ClassNotFoundException{

    Connection conn_sql = null;
    Statement stmt_sql = null;
    //Statement stmt_ora = null;

//Register JDBC driver      
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//Open Connection   
    System.out.println("Connecting to SQL database...");
    conn_sql = DriverManager.getConnection(DB_SQL, user1, pass1);

//Execute Query
    String sql_query;

    System.out.println("Creating statement for SQL...");
    stmt_sql = conn_sql.createStatement();
    sql_query = "Select * from attendancesummary";
    rs = stmt_sql.executeQuery(sql_query);
    System.out.println("SQL table details");

    System.out.println("Creating statement for SQL...");

    while(rs.next()){
    //Retrieve data
        int cno = rs.getInt("CardNo");
        int in_time = rs.getInt("entry");
        int out_time = rs.getInt("Exittm");
        String name = rs.getString("Name"); 
        int date = rs.getInt("TrDate");

    //Display data
        System.out.print("Employee ID: "+cno);  
        System.out.print("\tName: "+name);
        System.out.print("\tDate:"+date);
        System.out.print("\tEntry: "+in_time);
        System.out.print("\tExit: "+out_time);
    }       

}

}

数据库名称是DataDB,我要检索和显示的表是出席摘要。我已将路径设置为“C:\Program Files\Java\jdk1.8.0_11\bin”;“C:\Program Files\Microsoft JDBC Driver 4.0 for SQL Server\sqljdbc_4.0\enu\sqljdbc4.jar”

代码编译得很好..但是当我运行它时,我得到以下错误:

线程“主”java.lang.ClassNotFoundException 中的异常:com.microsoft.sqlserver.jdbc.SQLServerDriver 在 java.net.URLClassLoader$1.run 在 java.net.URLClassLoader$1.run 在 java.security.AccessController.doPrivileged 在 java.net.URLClassLoader.findClass 在 java.lang.ClassLoader.loadClass 在 sun.misc.Launcher$AppClassLoader.loadClass 在 java.lang.ClassLoader.loadClass 在 java.lang.Class.forname0 在 java.lang.Class.forname 在 transfer.main

我真的迷路了。任何帮助将不胜感激!

【问题讨论】:

标签: java sql-server jdbc classnotfoundexception sqlconnection


【解决方案1】:

这意味着在运行代码时,您的 CLASSPATH 中缺少 sqljdbc4.jar。如果您是从命令行运行此命令,则在java 命令的-cp 开关中添加sqljdbc4.jar 的路径。

如果您从 Eclipse 运行,则在构建路径中添加 sqljdbc4.jar

【讨论】:

  • 我试过:java -cp -sqljdbc4.jar transfer..得到以下错误错误:找不到或加载主类文件传输另外,我是从cmd提示符运行的。
  • 您需要在 CLASSPATH 中添加带有 main 方法的类。例如,如果您当前从与您的班级相同的目录运行,则在 Windows 上使用 java -cp <absolute path to sqljdbc4.jar>;. transfer
  • 刚试过:java -cp C:\Program Files\......\enu\sqljdbc4.jar;。转移..仍然是同样的错误。传输类包含主要方法。
  • 啊!你需要把transfer 变成public class ...想知道,我之前是怎么错过的:)
  • 好吧,我的错。终于克服了找不到主类错误!我尝试运行 java -cp ;.transfer 而不是 java -cp ;.transfer.... 由缺少空间引起的巨大灾难!非常感谢帕特!使类“公开”并使用类路径添加主要方法就可以了!
【解决方案2】:

在您的类路径中添加 sqljdbc4.jar。

如果您使用的是 Eclipse,那么您可以右键单击项目 -> 属性 -> java 构建路径。 转到库并单击添加外部 jar。 然后添加jdbc驱动jar。

希望这会有所帮助。

【讨论】:

  • 不使用 Eclipse。我试过了,报错:找不到或加载主类文件传输
  • 可能存在一些配置问题。 JVM 无法找到您的 .class 文件(Transfer.class)
  • 它编译程序。那里没有问题。在尝试让它运行时,我得到了错误。
  • 你遇到了同样的异常(Driver ClassNotFound)
  • 好的,错误是不同的。 java.sql.SQLException: 找不到适合 jdbc:......databaseName:DataDB 的驱动程序
【解决方案3】:

您必须将 JDBC 驱动程序添加到您的项目类路径中:例如,如果您使用 Eclipse,请将 jar 放在“lib”文件夹中

【讨论】:

    最近更新 更多