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

Jtable struct 仅包含、Name、USERName、EMAIL、Pass、Gender和Status.

我的SQL数据库表 struct 是lastName、firstName、middleName、用户名、密码、邮箱、性别、生日、地址、状态.表中记录的数据不符合顺序,添加到jtable的方式也不符合顺序.

我还结合了当我的数据出现在jtable中时,姓氏和名字也结合在一起.(间隔问题).

sql data

[heres whats happening) (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());
  }
}


推荐答案

JTable名代表参加了一些模特.最重要的是TableModel.这包含数据,并且应该包含所有列.

第二个型号是TableColumnModel.这确定哪些列实际显示在UI中.它具有添加、移动和删除列的方法.您可以使用此功能删除不想显示的列.

还有第三种型号,即ListSelectionModel.这确定 Select 哪些行或单独的单元格.

JTable具有在UI中移动列和行排序等功能,具有一些在UI和TableModel之间映射的方法.例如, convertColumnIndexToModel从UI列索引转换为匹配模型索引,而 convertColumnIndexToView则反过来转换.

Java相关问答推荐

卡夫卡流列表Serdes:总是空的

[145007:JC_ILLEGAL_SYMBOL_CHARACTER保存时:griddb中的牧师

无法在Java中使用Curve secp 256 k1验证JWT

将Nimbus设置为计算机上运行的所有Java应用程序的默认外观

Kubernetes的Java客户端检索状态.处于终止状态的Pod的阶段';正在运行';

RichFaces 3.x-Spring Boot-迁移web.xml

基于调车场算法的科学计算器

有没有更快的方法在N个容器中删除重复项?

在Eclipse中数组的可空性

迁移到Java 17后,日期显示不准确

在Frege中,我如何将一个字符串安全地转换为一个可能的Int?

try 使用预准备语句占位符获取信息时出现Try-With-Resources错误

除0错误/抱歉我的句子是PT

如何使用jooq更新记录?

为什么创建Java动态代理需要接口参数

Java类型推断:为什么要编译它?

当使用不同的参数类型调用时,为什么围绕Objects.equals的类型安全包装不会失败?

没有Google Play服务,Firebase Auth无法工作

始终使用Spring Boot连接mongodb上的测试数据库

JavaFX中ListView中的问题