java - 如何在 JavaFX 中正确连接 SQLite 与文本字段和标签?

标签 java sqlite javafx scenebuilder

我正在使用 JavaFX、Scene Builder 和 SQLite 制作一个应用程序。为了管理 SQLite 数据库,我使用 DB Browser

我在 SQLite 中有 3 个字段:ID、问题、答案

当我按下“添加”按钮时,会调用一个方法,并将带有问题的文本从 textaria 发送到 SQLite 中的问题选项卡,并且带有答案的 textaria 中的文本也会执行相同的操作。

ID 是一个数字,当我将这些字段添加到 SQLite 时,ID 会自动递增

我成功从窗口发送了数据,但我不明白如何从 SQlite 获取数据并将其设置为窗口中的标签和组合框

Window

DB Browser

QuestController:

package card;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;

import java.net.URL;
import java.sql.*;
import java.util.ResourceBundle;




public class QuestController implements Initializable {

  @FXML  private TextArea ta_questText, ta_answerText;

  @FXML  private Label lb_numberQuest;

  @FXML
  private ComboBox<?> idQuest;

  @Override
  public void initialize(URL location, ResourceBundle resources) {

    //register QuestController in  Context Class
    Context.getInstance().setQuestController(this);

  }

  @FXML
  void addCard(ActionEvent event) {

    PreparedStatement preparedStatement;
    ResultSet resultSet;
    String query = "select * from Cards where ID  = ? and question = ? and 
answer = ?";
Connection connection = DbConnection.getInstance().getConnection();


    try {
  String question = ta_questText.getText();
  String answer = ta_answerText.getText();

  Statement statement = connection.createStatement();

  int status = statement.executeUpdate("insert into Cards (question, 
 answer) values ('"+question+"','"+answer+"')");

  if (status > 0) {
    System.out.println("question registered");
      }

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

  }
}

DbConnection 类:

package card;

import org.sqlite.SQLiteConnection;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DbConnection {

  private DbConnection() {

  }

  public static DbConnection getInstance() {

   return new DbConnection();

 }

  public Connection getConnection() {



    String connect_string = "jdbc:sqlite:database.db";

    Connection connection = null;
    try {
  Class.forName("org.sqlite.JDBC");
   connection = DriverManager.getConnection("jdbc:sqlite:database.db");
} catch (SQLException e) {
  e.printStackTrace();
} catch (ClassNotFoundException e) {
  e.printStackTrace();
     }

     return connection;
  }

}

如何从 SQLite 获取所有现有 ID(数字)并将其放入组合框?

如何选择数字(ID)并将数字应用于标签?

如果我从组合框中选择任何数字

如何将连接到该号码的 SQLite 中带有问题和答案的文本应用到窗口中的文本框?

最佳答案

就像您帖子中的评论一样,我强烈建议将您的代码分解为多个层,以便更好地管理。干得好,从你的 DbConnection 开始类(class)。此外,JavaFx 已经设置了一些层供您开始。

这些是:

  • 查看:在场景生成器上创建的 FXML 文件
  • Controller :FXML 强制您使用的 JFx Controller

现在您可以添加更多层来管理您的代码。我建议从这些开始:

  • 模型:这将是您将处理的主要数据结构。对于初学者来说,也许您可​​以遵循数据库的结构? 示例:class Card带字段id , question ,和answer .
  • 持久性:此 Java 类将保存您的 SQL 代码。这还负责转换 ResultSet对象到您的模型对象。

最后,请记住您正在使用图层。确保他们的互动不会泄露。

View (FXML) <--> Controller + Model <--> Persistence + Model

回答您的问题:

How can I get all existing ID(numbers) from SQLite and put it to combobox?

  1. 使用 SQLite 连接执行 SQL SELECT 以获取所有 id s。 (SELECT id FROM cards 也许?)

  2. 成功 SELECT调用,迭代ResultSet目的。每次迭代应从 id 获取数据列,将其转换为字符串(或组合框接受的任何类型),然后将它们全部添加。 (像这样:comboBox.getItems().add(id))

How can choose a number(ID) and apply number to a label?

How can I apply text with question and answer from SQLite connected to that number to textarias in my window?

  1. 使用您的连接执行 SQL SELECT,这次在语句中添加 WHERE 子句来过滤结果。由于您的 SQL 现在有动态部分,因此使用 PreparedStatement会变好。 示例:SELECT id, question, answer FROM card WHERE id=?

  2. 使用 SQL 调用的结果,将它们分配给适当的 JFx 组件,例如标签和文本区域。

关于java - 如何在 JavaFX 中正确连接 SQLite 与文本字段和标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54002182/

相关文章:

java - 将 BitSet 设置为原始类型?

java - 在mysql中将mysql日期格式转换为dd-mmm-yyyy

java - "RMI TCP Connection(idle)"线程对应什么类型的连接?

JavaFX - TextFlow 中的下标和上标文本

java - 如何在 Eclipse 中获取 Javafx 9?

java - 打印数组中的元素,元素之间用逗号分隔

java - 如何从 android.database.SQLException 获取错误详细信息?

performance - 为什么 SQLite 3.7.2 在 Step 操作上比 3.7.9 快 3 倍

sql - SQLite日期时间函数的分辨率是多少?

java - Fontawesome-fx jar 在场景生成器中没有 UI 组件