【问题标题】:java - jTable database repeating valuesjava - jTable 数据库重复值
【发布时间】:2018-05-16 04:31:44
【问题描述】:

我正在尝试使用汽车品牌、型号以及是否可用来填充 Java 数据库,但我有一个大问题。当我输入多辆汽车到桌子上时,新车会打印到桌子上,但我以前输入过的汽车也会重新打印 [问题.png][1]。所以首先我进入了法拉利恩佐,然后我进入了特斯拉 S,但法拉利恩佐正在重复。

我知道问题不在于将汽车添加到数据库中,因为如果我查看数据库,它只会显示我输入的两个 [DatabasePic.png][2]。我知道我的问题在于如何将我的汽车输入 JTable。我的方法如下..

按钮点击事件:

private void refreshbtnMouseClicked(java.awt.event.MouseEvent evt) {                                        
    try {
        String Brand = brandlbl.getText();
        String Model = modellbl.getText();
        Boolean Available = false;
        switch (availabilitybox.getSelectedItem().toString()) {
            case "True":
                Available = true;
                break;
            case "False":
                Available = false;
                break;
        }
        InsertApp nw = new InsertApp();
        nw.insert(Brand, Model, Available);
        nw.refreshDatabase(jTable1);
    } catch (SQLException ex) {
        Logger.getLogger(Window.class.getName()).log(Level.SEVERE, null, ex);
    }
}

插入方法:

public void insert(String brand, String model, Boolean available) {
    String sql = "INSERT INTO CARDATA(brand,model,available) VALUES(?,?,?)";

    try (Connection conn = this.connect();
            PreparedStatement pstmt = conn.prepareStatement(sql)) {

        pstmt.setString(1, brand);
        pstmt.setString(2, model);
        pstmt.setBoolean(3, available);

        pstmt.executeUpdate();
    } catch (SQLException e) {

        System.out.println(e.getMessage());
    }

}

刷新我的数据库:

public void refreshDatabase(JTable table) throws SQLException {
    Connection con = connect();
    String SQL = "SELECT * FROM CARDATA";
    Statement stmt = con.createStatement();
    ResultSet rs = stmt.executeQuery(SQL);
    int col = rs.getMetaData().getColumnCount();
    System.out.println(col);
    while (rs.next()) {
        Object[] rows = new Object[col];
        for (int i = 1; i <= col; i++) {
            rows[i - 1] = rs.getObject(i);
        }
        ((DefaultTableModel) table.getModel()).insertRow(rs.getRow() - 1, rows);
    }
    con.close();
    rs.close();
    stmt.close();
}

【问题讨论】:

    标签: java mysql database swing jdbc


    【解决方案1】:

    当我输入多辆汽车到桌子上时,新车打印到桌子上,但我输入的以前的汽车也会重新打印

    您需要先清除 TableModel 中的数据,然后再开始向其中添加数据。

    基本代码应该是这样的:

    DefaultTableModel model = (DefaultTableModel)table.getModel();
    model.setRowCount(0);
    
    while (rs.next()) 
    {
        ...
    
        model.addRow(...);
    }
    

    或者不是每次插入时都从数据库中检索所有数据,而是将数据同时添加到表中:

    pstmt.executeUpdate();
    model.addRow(...);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-28
      • 2012-06-27
      • 1970-01-01
      • 2015-07-02
      • 2020-08-24
      • 1970-01-01
      • 2020-02-25
      • 1970-01-01
      相关资源
      最近更新 更多