我正在使用JavaFX,Scene Builder和SQLite制作应用程序。为了管理SQLite数据库,我使用了数据库浏览器
我在SQLite中有3个字段:ID,问题,答案
当我按下“添加”按钮时,将调用一个方法,将带有问题的文本发送到SQLite中的问题选项卡,并使用带有应答的文本发送文本。
ID是一个数字,当我将这些字段添加到SQLite时会自动递增
我成功地从窗口发送了数据,但是我不明白如何从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的带有问与答的文本应用于我窗口中的textarias?
答案 0 :(得分:1)
就像您的帖子中的评论一样,我强烈建议将您的代码分成几层,以提高可管理性。从您的DbConnection
类开始做得很好。此外,JavaFx已经设置了一些层供您开始。
这些是:
现在,您可以添加更多层来管理代码。我建议从这些开始:
class Card
,其中包含字段id
,question
和answer
。 ResultSet
对象转换为您的 model 对象。最后,请记住,您正在使用图层。确保他们的互动不会泄漏。
View (FXML) <--> Controller + Model <--> Persistence + Model
要回答您的问题:
如何从SQLite获取所有现有ID(编号)并将其放入组合框?
使用您的SQLite连接执行SQL SELECT以提取所有id
。 (也许是SELECT id FROM cards
?)
在成功进行SELECT
调用后,迭代ResultSet
对象。每次迭代都应从id
列中获取数据,将其转换为字符串(或组合框接受的任何类型),然后将其全部添加。 (类似这样:comboBox.getItems().add(id)
)
如何选择数字(ID)并将数字应用于标签?
如何将与该号码相关的SQLite中带有问题和答案的文本应用于窗口中的textarias?
使用您的连接执行SQL SELECT,这次在语句中添加WHERE子句以过滤结果。由于现在您的SQL中包含动态部分,因此使用PreparedStatement
会很好。 示例:SELECT id, question, answer FROM card WHERE id=?
使用SQL调用的结果,将它们分配给适当的JFx组件,例如标签和文本区域。