如何正确连接 SQLite 与 JavaFX 中的文本字段和标签?
How to correctly connect SQLite with textfields and labels in JavaFX?
我正在使用 JavaFX、Scene Builder 和 SQLite 制作应用程序。为了管理 SQLite 数据库,我使用 DB Browser
我在 SQLite 中有 3 个字段:ID、问题、答案
当我按下按钮 "Add" 时,会调用一个方法,并将带有问题的文本从 textaria 发送到 SQLite 中的问题选项卡,并将来自带有答案的文本的文本发送到 SQLite 中。
ID 是一个数字,当我将这些字段添加到 SQLite 时会自动递增
我从 window 成功发送了数据,但我不明白如何从 SQlite 获取数据并将其设置为 window
中的标签和组合框
任务控制器:
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 class:
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 的问答文本应用到我的 window 中的 textarias?
就像您在 post 中的评论一样,我强烈建议将您的代码分解成多个层以便更好地管理。从你的 DbConnection
class 开始干得好。此外,JavaFx 已经为您设置了一些图层。
这些是:
- 查看:您在场景生成器上创建的 FXML 文件
- Controller:FXML强制使用的JFx控制器
现在您可以添加更多层来管理您的代码。我建议从这些开始:
- Model:这将是您将要处理的主要数据结构。对于初学者,也许您可以遵循数据库的结构? 示例:
class Card
具有字段 id
、question
和 answer
。
- Persistence:此 Java class 将保存您的 SQL 代码。这也负责将
ResultSet
对象转换为您的 model 对象。
最后,请记住您正在使用图层。确保他们的互动不会泄露。
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
。 (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 组件,例如标签和文本区域。
我正在使用 JavaFX、Scene Builder 和 SQLite 制作应用程序。为了管理 SQLite 数据库,我使用 DB Browser
我在 SQLite 中有 3 个字段:ID、问题、答案
当我按下按钮 "Add" 时,会调用一个方法,并将带有问题的文本从 textaria 发送到 SQLite 中的问题选项卡,并将来自带有答案的文本的文本发送到 SQLite 中。
ID 是一个数字,当我将这些字段添加到 SQLite 时会自动递增
我从 window 成功发送了数据,但我不明白如何从 SQlite 获取数据并将其设置为 window
中的标签和组合框任务控制器:
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 class:
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 的问答文本应用到我的 window 中的 textarias?
就像您在 post 中的评论一样,我强烈建议将您的代码分解成多个层以便更好地管理。从你的 DbConnection
class 开始干得好。此外,JavaFx 已经为您设置了一些图层。
这些是:
- 查看:您在场景生成器上创建的 FXML 文件
- Controller:FXML强制使用的JFx控制器
现在您可以添加更多层来管理您的代码。我建议从这些开始:
- Model:这将是您将要处理的主要数据结构。对于初学者,也许您可以遵循数据库的结构? 示例:
class Card
具有字段id
、question
和answer
。 - Persistence:此 Java class 将保存您的 SQL 代码。这也负责将
ResultSet
对象转换为您的 model 对象。
最后,请记住您正在使用图层。确保他们的互动不会泄露。
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
。 (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 组件,例如标签和文本区域。