【问题标题】:javafx program won't connect to MySQLjavafx 程序无法连接到 MySQL
【发布时间】:2020-09-28 21:56:03
【问题描述】:

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

连接工具

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;
    }
  }

}

控制器

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 db、项目结构、外部库等的图片。

database instance

what the db tables look like

external libraries/project structure

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

【问题讨论】:

  • 这是因为MySQL 类名发生了变化,旧的类名是depraceted。在这里阅读:dev.mysql.com/doc/connector-j/8.0/en/…
  • 我很高兴能帮上忙。我写了我的评论作为答案,因此请随时将其标记为正确的,以便其他用户发现它很有帮助。

标签: java mysql javafx mysql-connector


【解决方案1】:

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

这对我有用

【讨论】:

    【解决方案2】:

    正如我在评论中所说,这是因为 MySQL 类名发生了变化,并且旧的类名已被废弃。在这里阅读: MySQL Docs

    【讨论】:

      猜你喜欢
      • 2020-11-26
      • 1970-01-01
      • 2021-05-21
      • 1970-01-01
      • 1970-01-01
      • 2016-02-21
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多