我正在使用 JavaFX、Scene Builder 和 SQLite 制作一个应用程序。为了管理 SQLite 数据库,我使用 DB Browser
我在 SQLite 中有 3 个字段:ID、问题、答案
当我按下“添加”按钮时,会调用一个方法,并将带有问题的文本从 textaria 发送到 SQLite 中的问题选项卡,并且带有答案的 textaria 中的文本也会执行相同的操作。
ID 是一个数字,当我将这些字段添加到 SQLite 时,ID 会自动递增
我成功从窗口发送了数据,但我不明白如何从 SQlite 获取数据并将其设置为窗口中的标签和组合框
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?
使用 SQLite 连接执行 SQL SELECT 以获取所有
id
s。 (SELECT id FROM cards
也许?)成功
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?
使用您的连接执行 SQL SELECT,这次在语句中添加 WHERE 子句来过滤结果。由于您的 SQL 现在有动态部分,因此使用
PreparedStatement
会变好。 示例:SELECT id, question, answer FROM card WHERE id=?
使用 SQL 调用的结果,将它们分配给适当的 JFx 组件,例如标签和文本区域。
关于java - 如何在 JavaFX 中正确连接 SQLite 与文本字段和标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54002182/