javafx 程序无法连接到 MySQL

javafx program won't connect to MySQL

我在将我的 javafx 程序连接到我的 MySQL 数据库时遇到问题。我正在尝试连接我正在制作的实际程序,但开始尝试连接基本上是一个空白程序,该程序仅连接到数据库并打印那里的内容,所以至少我知道我的连接很好。我正在使用 intellij 和 mysql workbench。我刚刚从我的笔记本电脑中删除了所有 mysql 东西并重新安装了它。我 运行 在那里遇到问题,但学会了如何正确删除它并重新安装它。由于我的 mysql 连接器 j,数据库没有连接是我非常没有教养的选择。我忘了下载了什么,因为太久了,但我认为我刚下载的 mysql 是 8.0.20 版,但我的程序只接受 6.0.5。这里有各种图像和代码片段。 我更改了代码中的一件事,现在已连接!!! 好的,在我写这篇文章时,我更改了一些东西,现在已连接.看来我正在混合使用连接器 j 的两个版本。

sample.fxml
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.BorderPane?>

<BorderPane fx:controller="sample.Controller" xmlns:fx="http://javafx.com/fxml">
  <center>
    <Button text="Test Database" onAction="#testDBConnection"/>
  </center>
</BorderPane>`

ConnectionUtil

package sample;
import java.sql.Connection;
import java.sql.DriverManager;

public class ConnectionUtil {

  public static Connection conDB(){
    try {
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/quizdb?useSSL=false", "root", "hockey");
        System.out.println("Connected");
        return con;
    } catch (Exception ex) {
        System.out.println("no connection");
        return null;
    }
  }

}

Controller

package sample;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Controller {

Connection con = ConnectionUtil.conDB();
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;

  public void testDBConnection(){
    String sql = "select * from question";

    try {
        preparedStatement = con.prepareStatement(sql);
        resultSet = preparedStatement.executeQuery();
        if(!resultSet.next()){
            System.out.println("End of questions");
        } else {
            int questionId = Integer.parseInt(resultSet.getObject("id").toString());
            String question = resultSet.getObject("question").toString();
            String correctAnswer = resultSet.getObject("correctAnswer").toString();
            System.out.println("Question# " + questionId + "\nQuestion: " + question + "\nCorrect Answer: " + correctAnswer);

        }
    } catch (SQLException throwables) {
        throwables.printStackTrace();
    }

  }

}

pom.xml

<?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>kruzel.rob</groupId>
<artifactId>TestConnection</artifactId>
<version>1.0-SNAPSHOT</version>

<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>6.0.5</version>
    </dependency>

</dependencies>


</project>

这是我的 mysql 数据库、项目结构、外部库等的图片。

database instance

what the db tables look like

external libraries/project structure

所以我想我现在的问题是为什么在 pom.xml 版本中我需要 6.0.5 而我的外部库 link 到 8.0.20?他们最初 linked 到 6.0.5 但我无法连接所以我下载了 8.0.20 jar 和 source.jar 并添加了它们。我知道连接终于可以正常工作了,但想了解这里发生了什么。在此先感谢您的帮助!!

如我的评论所述,这是因为 MySQL class 名称已更改,旧的 class 名称已被删除。在这里阅读: MySQL Docs

在使用 JDBC 连接器 jar 文件配置项目的构建路径后,您可以将 requires java.sql; 添加到 module-info.java

这对我有用