java.lang.ClassNotFoundException:com.mysql.cj.jdbc.Driver,但 mysql 连接器位于 CLASSPATH 中

问题描述 投票:0回答:1

我有ubuntu 20.04.6。 Openjdk 11. mysql-connector-java-8.0.20.jar,重命名为 mysql.jar CLASSPATH="/var/www/html/java/mysql.jar",classpath 在 ~/.bashrc 安装 openjdk 11 并设置后类路径,仍然无法从 Linux 终端执行我的应用程序。我给你源代码:

import java.sql.Connection;
import java.sql.Statement;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
public class mysql {
    public static void main(String args[]) {
        Connection conexion=null;
        Statement instruccion=null;
        ResultSet conjuntoresultados=null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conexion=DriverManager.getConnection("jdbc:mysql://localhost:3306/galpon","root","password");
            instruccion=conexion.createStatement();
            conjuntoresultados=instruccion.executeQuery("select usuario,cbu from duenos");
            ResultSetMetaData metadatos=conjuntoresultados.getMetaData();
            int numerocolumnas=metadatos.getColumnCount();
            System.out.printf("Dueños de vehículos:");
            for(int i=0;i<numerocolumnas;i++)
                System.out.printf("%-8s\t",metadatos.getColumnName(i));
            System.out.println();
            while(conjuntoresultados.next()){
                for(int i=0;i<numerocolumnas;i++)
                    System.out.printf("%-8s\t",conjuntoresultados.getObject(i));
                System.out.println();
            }
        }
        catch (SQLException sqlexcepcion) {
            sqlexcepcion.printStackTrace();
        }
        catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                conjuntoresultados.close();
                instruccion.close();
                conexion.close();
            }
            catch ( Exception excepcion )
            {
                excepcion.printStackTrace();
            }
        }
    }
}

错误信息为: java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) at java.base/jdk.internal .loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) 在 java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:527) 在 java.base/java.lang.Class.forName0(本机方法)在java.base / java.lang.Class.forName(Class.java:315)在mysql.main(mysql.java:13)java.lang.NullPointerException在mysql.main(mysql.java:39)

感谢您给我的每一个帮助

我尝试通过从 mysql 下载中下载的 deb 安装程序来安装 mysql 连接器。没有工作。然后下载mysql连接器java 8.0.20.jar,重命名为位于/var/www/html/java中的mysql.jar,然后在~/.bashrc中设置CLASSPATH=/var/www/html/java/mysql.jar,然后通过“source ~/.bashrc”重新加载 bashrc。 这些对我来说都不起作用。我不知道为什么

java mysql classnotfoundexception connector
1个回答
0
投票

类路径

通过查询 System

 属性来确定运行时有效的 
classpath

String classpath = System.getProperty( "java.class.path" );

包含 MySQL JDBC 驱动程序的类路径摘录,在我的 IDE (IntelliJ) 中运行。

…/com/mysql/mysql-connector-j/9.0.0/mysql-connector-j-9.0.0.jar:…

依赖关系

使用 Apache MavenGradle 等构建管理工具,Java 工作变得更容易

如果使用 Maven,请使用 Maven 原型创建一个新项目,如 快速入门

。新项目包含一个 POM 文件供您编辑。

将 JDBC 驱动程序指定为 依赖项

  <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
  <dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>9.0.0</version>
  </dependency>

代码

看起来您的 JDBC 来自过时的教程。以下是一些改进。
Class.forName("com.mysql.cj.jdbc.Driver");

很多
年来,都没有必要打电话给Class.forName。很久以前就对 JDBC 进行了重新架构,以通过 Java 服务提供者接口 (SPI) 自动加载和注册所有可用的 JDBC 驱动程序。

养成使用

DataSource
接口和实现的习惯。在实际工作中,这使您最终能够在源代码之外外部化数据库连接信息(用户名、密码、服务器地址等)。同时,写一个这样的方法:

private DataSource dataSource ( )
{
    com.mysql.cj.jdbc.MysqlDataSource dataSource = new com.mysql.cj.jdbc.MysqlDataSource();  // Implementation of `DataSource`.
    dataSource.setServerName( "localhost" );
    dataSource.setPortNumber( 3306 );
    dataSource.setDatabaseName( "example_db_" );
    dataSource.setUser( "scott" );
    dataSource.setPassword( "tiger" );
    return dataSource;
}

使用 try-with-resources 语法来简化代码,同时自动关闭打开的数据库资源。

String sql = … ;
try
(
    Connection connection = dataSource.getConnection() ;
    Statement statement = … ;
    ResultSet resultSet = … ;
)
{
    … Handle your ResultSet. 
}
catch ( … )
{
    … Handle error conditions.
}

您将找到我编写的多个完整示例应用程序的源代码,这些示例应用程序演示了 JDBC 与 MySQL、H2 和 Postgres,更不用说 Stack Overflow 上的其他优秀现有材料了。搜索了解更多。

POM 示例

这是一个由 Quickstart 原型创建的 Maven POM 示例,然后由我调整以更新所有版本,并使用 JUnit Jupiter 的聚合器版本。

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>work.basil.example</groupId>
    <artifactId>ExMySql</artifactId>
    <version>1.0-SNAPSHOT</version>

    <name>ExMySql</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.release>22/maven.compiler.release>7</maven.compiler.release>
    </properties>

    <dependencies>

        <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.11.0</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>9.0.0</version>
        </dependency>

    </dependencies>

    <build>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
                <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.4.0</version>
                </plugin>
                <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.3.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.13.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>3.3.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>3.4.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>3.1.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>3.1.2</version>
                </plugin>
                <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
                <plugin>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>3.12.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-project-info-reports-plugin</artifactId>
                    <version>3.6.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>
© www.soinside.com 2019 - 2024. All rights reserved.