Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取NoClassDefFoundError:com.mysql.jdbc.Driver_Java_Mysql_Exception_Jdbc_Noclassdeffounderror - Fatal编程技术网

Java 获取NoClassDefFoundError:com.mysql.jdbc.Driver

Java 获取NoClassDefFoundError:com.mysql.jdbc.Driver,java,mysql,exception,jdbc,noclassdeffounderror,Java,Mysql,Exception,Jdbc,Noclassdeffounderror,我目前正在用java编写一个jdbc客户机-服务器套接字应用程序。我在初始化jdbc时遇到了一些麻烦,因为我没有使用ide,只使用文本编辑器和jdk。我已将jdbc驱动程序放在jdk和jre类路径C:\Program Files\Java\jdk1.6.0\U 20\jre\lib\ext和\jre\lib\ext中。我还将jar重命名为com.mysql.jdbc.driver,但我仍然没有运气。这是找不到司机的问题还是其他问题 这是我的错误: C:\Users\imallin\My Docu

我目前正在用java编写一个jdbc客户机-服务器套接字应用程序。我在初始化jdbc时遇到了一些麻烦,因为我没有使用ide,只使用文本编辑器和jdk。我已将jdbc驱动程序放在jdk和jre类路径C:\Program Files\Java\jdk1.6.0\U 20\jre\lib\ext和\jre\lib\ext中。我还将jar重命名为com.mysql.jdbc.driver,但我仍然没有运气。这是找不到司机的问题还是其他问题

这是我的错误:

C:\Users\imallin\My Documents>java Provider
Waiting for connection
Connection received from 127.0.0.1
server>Hi welcome to the Cyfieithu Eadar-Theangachadh translation server, please
enter a command. Type cmd to see a list of commands
java.lang.ClassNotFoundException: com.mysql.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.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at Provider.insertData(Provider.java:82)
    at Provider.run(Provider.java:40)
    at Provider.main(Provider.java:118)
这是我的密码:

import java.io.*;
import java.net.*;
import java.util.Scanner;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Provider{
ServerSocket providerSocket;
Socket connection = null;
ObjectOutputStream out;
ObjectInputStream in;
String message;
Connection con;
Provider(){}
void run()
{
        Console c = System.console();
    if (c == null) {
        System.err.println("No console.");
        System.exit(1);
    }
    try{
        //1. creating a server socket
        providerSocket = new ServerSocket(2004, 10);
        //2. Wait for connection
        System.out.println("Waiting for connection");
        connection = providerSocket.accept();
        System.out.println("Connection received from " + connection.getInetAddress().getHostName());
        //3. get Input and Output streams
        out = new ObjectOutputStream(connection.getOutputStream());
        out.flush();
        in = new ObjectInputStream(connection.getInputStream());
                        sendMessage("Hi welcome to the Cyfieithu Eadar-Theangachadh translation server, please enter a command. Type cmd to see a list of commands");
        //4. The two parts communicate via the input and output streams
        do{
            try{
                                    insertData();

            message = (String) in.readObject();
            System.out.println("client>" + message);
                                if (message.equals("register"))
                    sendMessage("first name?");
                    String firstName = (message);
                    sendMessage("first name = " + firstName);
                    insertData();
                                if (message.equals("listlanguages"))
                                sendMessage("English \n Thai \n Geordia \n Gaelic \n Welsh \n Gaelic \n Urdu \n Polish \n Punjabi \n Cantonese \n Mandarin");
                    if (message.equals("bye"))
                    sendMessage("bye");
                    }
            catch(ClassNotFoundException classnot){
                System.err.println("Data received in unknown format");
            }
            catch (Exception e){
            System.err.println("Error: " + e.getMessage());
            }
        }while(!message.equals("bye"));
    }
    catch(IOException ioException){
        ioException.printStackTrace();
    }
    finally{
        //4: Closing connection
        try{
            in.close();
            out.close();
            providerSocket.close();
        }
        catch(IOException ioException){
            ioException.printStackTrace();
        }
    }
}
    private void insertData()
{

    try
    {
        Class.forName("com.mysql.jdbc.Driver");


        con = DriverManager.getConnection(
                "jdbc:mysql://localhost/translator","root","");

String sql = "Insert INTO users (ID, firstName) VALUES ('123','123')";

        Statement statement = con.createStatement();

        statement.execute(sql);


    }
                    catch (Exception e){
            System.err.println("Error: " + e.getMessage());
            }
    }


void sendMessage(String msg)
{
    try{
        out.writeObject(msg);
        out.flush();
        System.out.println("server>" + msg);
    }
    catch(IOException ioException){
        ioException.printStackTrace();
    }
}

public static void main(String args[])
{
    Provider server = new Provider();
    while(true){
        server.run();
    }
}
}

最终,您的jdbc类路径没有设置

我就是这么做的(一个坏习惯)

提取jar文件。(假设您在home directory~中工作,提取jar文件的目录名为odbc) 然后将类路径设置为

导出类路径=~/odbc:

(不要忘记在路径之后添加
;-))

哦,我没意识到你在windows机器上工作。 然后 将环境变量(如果不存在则创建)CLASSPATH设置为
c:\odbcdir


或者另一种方法是使用
java-cp pathToJAR.jar Main

MySQL驱动程序jar不在类路径上。您需要通过将
-cp
参数用于
java

来解决这个问题,就像其他答案已经暗示的那样,jdbc Jar不在您的类路径上

要解决此问题,您需要在运行Java主文件时声明它应该使用该Jar,方法如下:

java -cp "nameOfJar.jar" Provider
java -cp "./lib/*;." NameOfJavaClassWithMain
这是假设您的jar与您的提供程序文件位于同一目录上,如果不是,您应该指定它的路径

这是完全可选的,但我喜欢有一个名为“lib”的目录,在那里我放置了运行项目所需的所有JAR,然后您可以通过执行以下操作将其添加到类路径:

java -cp "nameOfJar.jar" Provider
java -cp "./lib/*;." NameOfJavaClassWithMain
最终,您可能需要将几个目录或JAR添加到类路径中,您可以使用
在linux中)分隔符,如:

java -cp "./lib/*;./conf/configurationFile.properties;." NameOfJavaClassWithMain
如果.class不在其中一个JAR上,则可能必须将本地目录添加到类路径:

java -cp "./lib/*;." NameOfJavaClassWithMain
如果类上有包声明(应该),则需要通过完全分类的名称(包+类名)引用该类,如下所示:

java -cp "./lib/*;." my.package.NameOfJavaClassWithMain

你还没有说明你犯了什么错误。这让我很难给出答案…错误:com.mysql.jdbc.driver这就是我从捕获异常中得到的所有信息请提供错误消息和stacktrace。我不知道如何获取更具体的错误,错误:com.mysql.jdbc.driver是我得到的全部。@user1080390:您收到此短错误消息是因为
System.err.println(“错误:+e.getMessage())。将该行替换为
e.printStackTrace()
——这应该会提供更多细节。这有点模糊,我该如何设置它?我运行了“java-cp”postgresql-9.1-902.jdbc4.jar“Provider”,但我得到了一个Provider“main”java.lang.NoClassDefFoundError:Provider.ClassNotFoundExceptionI运行了“java-cp”postgresql-9.1-902.jdbc4.jar”Provider但是我得到了一个Provider“main”java.lang.NoClassDefFoundError:Provider.ClassNotFoundException您可以更新您的问题以获得您现在调用的命令行吗?为什么在实例化mysql驱动程序时会有一个postgres jar呢?我将从mysql站点下载j连接器。我可能有错误的jar。我正在运行java-cp“/lib/mysql-connector-java-5.1.20-bin”提供程序-仍然在线程“main”java.lang.NoClassDefFoundError中获得相同的异常:由以下原因导致的提供程序:java.lang.ClassNotFoundException:Provider位于java.net.URLClassLoader$1.run(未知源代码)位于java.security.AccessController.DoPrivileged(本机方法)等等…有什么想法吗?我肯定有正确的jar文件,并且目录是正确的