如何专门保存数据而不将其显示在jTable中?

问题描述 投票:0回答:1

我希望程序能够精确地将数据放入 Jtable 中,而不弄乱我的 sql 数据库。

Jtable 结构只有 NAME、USERNAME、EMAIL、PASS、GENDER 和 STATUS。

我的sql数据库表结构是姓氏,名字,中间名,用户名,密码,电子邮件,性别,生日,地址,状态。表中记录的数据是不按顺序的,并且添加到 jtable 中的方式也是不按顺序的。

此外,当我的数据显示在 jtable 中时,姓氏和名字也会合并。 (间距问题)。

[这就是发生的事情) (https://i.sstatic.net/VC4FAU7t.png))

代码:

  DefaultTableModel tabolmodel =
    (DefaultTableModel) jTable4.getModel(); // add string array basta yon
if (tabolmodel.getRowCount() == 0) {
  JOptionPane.showMessageDialog(this, "Table is Empty.");
} else {
  try {
    Class.forName("com.mysql.cj.jdbc.Driver");
    java.sql.Connection con = DriverManager.getConnection(
        "jdbc:mysql://localhost:3306/shsgrading?useSSL=false", "root", "");

    for (int i = 0; i < tabolmodel.getRowCount(); i++) {
      String NAME = (String) tabolmodel.getValueAt(i, 0);
      String USERNAME = (String) tabolmodel.getValueAt(i, 1);
      String EMAIL = (String) tabolmodel.getValueAt(i, 2);
      String PASS = (String) tabolmodel.getValueAt(i, 3);
      String GENDER = (String) tabolmodel.getValueAt(i, 4);
      String STATUS = (String) tabolmodel.getValueAt(i, 5);

      String lastName = txtLname.getText();
      String firstName = txtFname.getText();

      if (NAME.contains(", ")) {
        String[] names = NAME.split(", ", 2);
        lastName = names[0].trim();
        firstName = names[1].trim();
      } else {
        firstName = NAME;
      }

      String middleName = txtMname.getText();
      String address = txt_address.getText();
      java.sql.Date sqlStartDate = null;
      java.util.Date utilStartDate = date_birthday.getDate();

      String status = "Inactive";

      int statusMaxSize = 30;
      if (status.length() > statusMaxSize) {
        status = status.substring(0, statusMaxSize);
      }

      String query =
          "INSERT INTO instructor(lastName, firstName, middleName, username, password, email, gender, birthday, address, status) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

      PreparedStatement prepstmt = con.prepareStatement(query);
      prepstmt.setString(1, lastName);
      prepstmt.setString(2, firstName);
      prepstmt.setString(3, middleName);
      prepstmt.setString(4, USERNAME);
      prepstmt.setString(5, PASS);
      prepstmt.setString(6, EMAIL);
      prepstmt.setString(7, GENDER);
      if (sqlStartDate != null) {
        prepstmt.setDate(8, sqlStartDate);
      } else {
        prepstmt.setDate(8, new java.sql.Date(new java.util.Date().getTime()));
      }
      prepstmt.setString(9, address);

      if (STATUS != null && !STATUS.isEmpty()) {
        prepstmt.setString(10, STATUS);
      } else {
        prepstmt.setString(10, status);
      }

      prepstmt.executeUpdate();
      prepstmt.close();
    }

    JOptionPane.showMessageDialog(this, "Data inserted successfully.");
    tabolmodel.setRowCount(0);
    con.close();
  } catch (Exception e) {
    e.printStackTrace();
    JOptionPane.showMessageDialog(this, "An error occurred: " + e.getMessage());
  }
}


java sql mysql user-interface error-handling
1个回答
0
投票

A

JTable
委托给几个模型。最重要的是
TableModel
。这包含数据,并且应该包含所有列。

第二个型号是

TableColumnModel
。这决定了 UI 中实际显示哪些列。它具有添加、移动和删除列的方法。您可以使用它来删除您不想显示的列。

还有第三种型号,

ListSelectionModel
。这决定了选择哪些行或单独的单元格。

通过在 UI 中移动列和行排序等功能,

JTable
有一些方法可以在 UI 和
TableModel
之间进行映射。例如,
 convertColumnIndexToModel
从 UI 列索引转换为匹配模型索引,而
 convertColumnIndexToView
则相反。

© www.soinside.com 2019 - 2024. All rights reserved.