Моя программа выглядит следующим образом: когда я нажимаю кнопку, в этом всплывающем окне появляется всплывающее окно (другой класс JFrame, я не использовал JOptionPane), есть JTable, который содержит данные из базы данных (которые являются именами файлов) ) Я хочу взять это имя файла и использовать его в другом классе для использования другой функции.
Здесь я объявил строку в классе "OpenLesson" (это всплывающее окно):
public class openLesson extends javax.swing.JFrame {
String activeLesson = "Manually Added"; //this is default when nothing is selected
public openLesson() {
initComponents();
}
и затем здесь функция getLesson (), которая берет данные из базы данных в зависимости от того, что выбрано в JTable. А также измените значение строки activeLesson
в зависимости от того, что выбрано:
public String getLesson() throws ClassNotFoundException, SQLException {
int selectedColumn = 0;
int selectedRow = tblOpenLesson.getSelectedRow(); // this is the JTable
Connection con = null;
Statement stmtGetLesson = null;
try {
Class.forName("org.sqlite.JDBC");
con = DriverManager.getConnection("jdbc:sqlite:sql_items.sqlite");
stmtGetLesson = con.createStatement();
ResultSet rs = stmtGetLesson.executeQuery("SELECT * FROM lessons WHERE lesson = '" + tblOpenLesson.getModel().getValueAt(selectedRow, selectedColumn) + "';");
if (rs.next()) {
activeLesson = rs.getString("lesson"); // this (should) change the value of activeLesson above with the result of the query
return rs.getString("lesson");
}
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, e);
} catch (ClassNotFoundException ex) {
Logger.getLogger(openLesson.class.getName()).log(Level.SEVERE, null, ex);
} finally {
con.close();
stmtGetLesson.close();
}
return "";
}
Теперь для другого класса , я хочу использовать строку activeLesson
, потому что я хочу использовать его в запросе sqlite для другого JTable. Вот функция:
public void exeUpdateDBquestion_items(String ans, String desc) throws ClassNotFoundException, SQLException{
openLesson ol = new openLesson();
Connection con = null;
Statement stmt = null;
try {
Class.forName("org.sqlite.JDBC");
con = DriverManager.getConnection("jdbc:sqlite:sql_items.sqlite"); // connect to database
stmt = con.createStatement();
stmt.executeUpdate("INSERT INTO question_items (item_name, item_desc, lesson) VALUES ('" + ans + "','" + desc + "','" + ol.activeLesson + "')");
JOptionPane.showMessageDialog(null, "Identified Item Saved!");
} catch (SQLException e){
JOptionPane.showMessageDialog(null, e.getMessage());
} finally {
con.close();
stmt.close();
}
}
И здесь возникает проблема, независимо от того, что я выбираю на JTable из класса openLesson
, activeLesson
по-прежнему использует текст по умолчанию «Вручную добавленный», а не выбранные данные.
Извините, если это глупый вопрос, я новичок в java и в программировании в целом, поэтому я не совсем понимаю, в чем здесь проблема.
РЕДАКТИРОВАТЬ: Вот как моя таблица получает свои данные. При нажатии этой кнопки появится всплывающее окно с таблицей (у меня есть функция, которая обновляет базу данных перед этой функцией).
public void updateDBlessons() throws SQLException {
Connection con = null;
Statement stmt = null;
try {
Class.forName("org.sqlite.JDBC");
con = DriverManager.getConnection("jdbc:sqlite:sql_items.sqlite");
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM lessons");
DefaultTableModel dtm = (DefaultTableModel) tblOpenLesson.getModel();
dtm.setRowCount(0);
while(rs.next()){
Object o[] = {rs.getString("lesson")};
dtm.addRow(o);
}
} catch (ClassNotFoundException | SQLException e) {
System.out.println(e);
} finally {
con.close();
stmt.close();
}
}