【问题标题】:Java JDBC Driver stops working after initial execution [duplicate]Java JDBC驱动程序在初始执行后停止工作[重复]
【发布时间】:2021-05-25 19:16:50
【问题描述】:

我目前正在使用 VS Code 上的 Java 制作后端报告系统(用于投票系统分配),我正在使用 JDBC 库连接到 MySQL 数据库以进行计算和统计等。所以发生的事情是,一旦我创建了一个项目文件并将 mysql-connector-java-8.0.25.jar 包含在引用的库中,我就可以很好地连接到数据库并从表中检索数据,但是经过几次执行我不再得到输出,它显示错误“java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver”。

谁能告诉我为什么会发生这种情况以及如何解决这个问题?据我所知,环境变量中没有发生任何变化(至少从我在 Windows 路径列表中可以看到的),除非某处被覆盖或者它是某种错误。任何建议都会很有帮助,我一整天都无法解决这个问题

这就是我的 ReportSystem.java 的样子...

import java.sql.*;
public class ReportSystem 
{

    public static void main(String[] args)
    {
        //Test driver connection/registration
        try
        {
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ElectionDB","<username>","<password>");
            Statement stmt = conn.createStatement();
            ResultSet result = stmt.executeQuery("SELECT * FROM ElectionDB.Votes");


            int typeColumn = 1;
            int districtColumn = 2;

            //Output results line by line
            while(result.next())
            {
                System.out.println(result.getString(typeColumn));
                System.out.println(result.getString(districtColumn));
            }

            //Remember to close the connection
            conn.close();
        }
        catch (Exception e)
        {
            System.out.println(e);
        }
    }
}

我在目录中的文件结构如下:

ReportSystem
    >src > ReportSystem.java
         > ReportSystem.class
    >lib
    >.vscode > settings.json

The JRE system library used is: [jdk-16.0.1]
The Referenced Libraries contains: [mysql-connector-java-8.0.25.jar]

上下文截图Project Setup in VS Code

【问题讨论】:

  • 这个错误看起来很奇怪。 Class.forName 可能不是必需的。我会将Connection conn = DriverManager… 包装起来尝试使用资源,这样您就可以确定它会关闭。
  • 我认为这确实是一个错误,因为当我使用 Eclipse 并将构建路径指向同一个驱动程序时,它似乎可以连续工作
  • Class.forName() 行自 2007 年以来就不再需要了。删除它即可。

标签: java mysql visual-studio-code jdbc


【解决方案1】:

通过单击运行按钮连续运行代码 20 次后,我可以得到结果。唯一不同的是JDBC连接字符串,直接右键MYSQL连接复制:

所以在我的项目中,连接字符串是这样的:

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/?user=username","<username>","<password>");

你可以试试

String url="jdbc:mysql://localhost:3306/ElectionDB?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC"

供您参考,操作系统信息:

MySQL: 8.0 // mysql-connector-java-8.0.25.jar
VSCode:1.56.2 // java.home: JDK16 // Java 调试器:0.33.1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 2018-04-17
    • 2015-11-06
    • 2010-12-15
    • 2016-03-29
    • 2011-01-24
    相关资源
    最近更新 更多