【问题标题】:Populating jTable from postgresql从 postgresql 填充 jTable
【发布时间】:2015-11-26 11:05:42
【问题描述】:

我正在使用数据库和 GUI 在 NetBeans 8 中进行 java 项目。当我搜索数据库并将找到的值添加到 JTable 时出现问题:所有值仅添加到 JTable 的第一列,而我需要添加它们分别到相应的列。我尝试了 getColumnCount() 它也给了我 1 意味着我只有一列。如何将数据库值添加到 JTable 的相应列?

我已经尝试了here建议的所有填充函数

我的代码:

jTable1 = new javax.swing.JTable();

       String sql = "SELECT (flight_id, plane_name, dep_city, arival_city, date_month, date_day, eclassnumberofseats, bclassnumberofseats, fclassnumberofseats) FROM flight "
                 + "WHERE (dep_city = '" + SearchFlight.getFromCity() + "' AND " 
                 + "arival_city = '" + SearchFlight.getToCity() + "' AND "
                 + "date_month = '" + SearchFlight.getMonth() + "');";

        PreparedStatement stat = conn.prepareStatement(sql);
        ResultSet rs = stat.executeQuery();
jTable1.setModel(DbUtils.resultSetToTableModel(rs)
    );
jScrollPane1.setViewportView(jTable1);

SearchFlight 是一个 GUI 类,它的方法返回在 GUI 中获取的字符串。 DbUtils.resultSetToTableModel(rs)是net.proteanit.sql.DbUtils中的一个方法;

因此,预计数据将填充到 9 列中,但是它将所有数据填充到一列中。

【问题讨论】:

    标签: java database swing postgresql jtable


    【解决方案1】:
    SELECT ( ... )
    

    必须

    SELECT .... 
    

    并按预期更好地使用 PreparedStatement。否则SQL injection 仍然是可能的。并且 try-with-resources 在所有情况下都会关闭事物。

        String sql = "SELECT flight_id, plane_name, dep_city, arival_city, date_month, "
                 + "date_day, eclassnumberofseats, bclassnumberofseats, fclassnumberofseats "
                 + "FROM flight "
                 + "WHERE dep_city = ? AND " 
                 + "arival_city = ? AND "
                 + "date_month = ?";
    
        try (PreparedStatement stat = conn.prepareStatement(sql)) {
            stat.setString(1, SearchFlight.getFromCity());
            stat.setString(2, SearchFlight.getToCity());
            stat.setString(3, SearchFlight.getMonth());
            try (ResultSet rs = stat.executeQuery()) {
                 jTable1.setModel(DbUtils.resultSetToTableModel(rs));
            }
        }
    

    【讨论】:

    • @SherzodElamanov,不要忘记点击复选标记“接受”答案,这样人们就知道问题已经解决了。
    猜你喜欢
    • 2012-01-27
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 2015-06-19
    • 2012-11-11
    • 2010-09-22
    相关资源
    最近更新 更多