Я пишу приложение с JavaFX, Scene Builder и SQlite
У меня есть выпадающий список со значениями (id), который идет из базы данных SQLite. У меня есть 2 textArias.У меня есть кнопка «Добавить», которая имеет метод void addCard(ActionEvent event)
.Метод добавляет текст из textArias и применяет его к определенным столбцам в SQLite.
Проблема заключается в следующем: когда я пытаюсь добавить значения в SQLite и нажимаю кнопку, а затем открываю выпадающий список, я не вижу добавленного идентификатора., но когда я закрываю окно и открываю его снова, в выпадающем списке отображается мой добавленный идентификатор.
Очень неприятно закрывать и открывать окно каждый раз, когда я хочу увидеть добавленный результат в выпадающем списке
- Класс модели содержит всю логику
- Класс контроллера работает между моделью и представлением
- Класс Persistent Queries содержит все запросы к / из SQLite
Как отобразить новоеДобавил ID после нажатия на кнопку «Добавить»?
В этом видео показано, как работает мое приложение:
Видео
Класс модели:
package src.card;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Cards {
PersistentQueries pq = new PersistentQueries();
final ObservableList OPTIONS = FXCollections.observableArrayList();
Connection connection;
PreparedStatement pst = null;
ResultSet rs = null;
public Cards() {
try {
this.connection = DbConnection.getConnection();
} catch (SQLException ex) {
ex.printStackTrace();
}
if (this.connection == null) {
System.out.println("connection is not successful!");
System.exit(1);
}
}
public ObservableList getOPTIONS() {return OPTIONS;}
//add ID of cards to combobox
void fillCombobox() {
try {
pst = connection.prepareStatement(pq.getSqlSelectID());
rs = pst.executeQuery();
while (rs.next()) {
OPTIONS.add(rs.getString("ID"));
}
pst.close();
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//check if database is connected
public boolean isDbConnected() {
return this.connection != null;
}
}
Класс контроллера:
package src.card;
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 src.card.Cards;
import src.card.Context;
import src.card.DbConnection;
import src.card.PersistentQueries;
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 questId, error;
@FXML private ComboBox<String> combobox_question;
Cards cards = new Cards();
PersistentQueries pq = new PersistentQueries();
@Override
public void initialize(URL location, ResourceBundle resources) {
//register QuestController in Context Class
Context.getInstance().setQuestController(this);
cards.fillCombobox();
combobox_question.setItems(cards.getOPTIONS());
}
//adding cards to database
@FXML
void addCard(ActionEvent event) {
if (ta_questText.getText().equals("") ||
ta_answerText.getText().equals("")) {
error.setText("All fields are required!");
} else {
try {
error.setText("");
Connection conn = DbConnection.getConnection();
PreparedStatement stmt = conn.prepareStatement(pq.getSqlInsert());
stmt.setString(1, this.ta_questText.getText());
stmt.setString(2, this.ta_answerText.getText());
ta_questText.setText("");
ta_answerText.setText("");
stmt.execute();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
@FXML
void idList(ActionEvent event) {
questId.setText(combobox_question.getValue() + ".");
}
}
Класс PersistentQueries
package src.card;
public class PersistentQueries {
private String sqlInsert = "INSERT INTO Cards(question, answer) VALUES
(?,?)";
private String sqlSelectID = "SELECT ID FROM Cards";
private String sqlSelect = "SELECT question and answer FROM Cards";
public String getSqlInsert() {
return sqlInsert;
}
public void setSqlInsert(String sqlInsert) {
this.sqlInsert = sqlInsert;
}
public String getSqlSelectID() {
return sqlSelectID;
}
public void setSqlSelectID(String sqlSelectID) {
this.sqlSelectID = sqlSelectID;
}
public String getSqlSelect() {
return sqlSelect;
}
public void setSqlSelect(String sqlSelect) {
this.sqlSelect = sqlSelect;
}
}