繁体   English   中英

Java JTable显示数据库记录

[英]Java JTable Displaying database records

我在获取数据库记录时遇到问题,使数据库记录显示在JTable中的最佳方法是什么,所以现在我使用结果集来获取记录并将其存储在Object [] []数组中,我希望此变量可以说Object [] []数据其值将显示在JTable上,我不知道我是否在做这个事情。 以及如何根据数据库中的记录初始化Object [] []数据大小。 谢谢

这是我的代码:

ResultSet rs = null;
Statement sql = null;
Object[][] data = new Object[100][100];

        String query = "SELECT * FROM INVENTORY";
        sql = con.createStatement();
        sql.executeQuery(query);
        rs = sql.getResultSet();

        while(rs.next()){
            for(int i = 0; i < data.length; i++){
                for(int j = 0; j < data[i].length; j++){
                    int valId = rs.getInt(1);
                    String valName = rs.getString(2);
                    String valCat = rs.getString(3);
                    String valDesc = rs.getString(4);
                    double  valPrice = rs.getDouble(5);
                    int valstock = rs.getInt(6);
                    int valSupply = rs.getInt(7);

                    System.out.println(valId);
                    System.out.println(valName);
                    System.out.println(valCat);
                    System.out.println(valDesc);
                    System.out.println(valPrice);
                    System.out.println(valstock);
                    System.out.println(valSupply);

就像您看到的那样,我使用多个for循环来获取记录,使用多个for循环是否正确? 还是有任何简单的方法,如何根据数据库上的总记录初始化Object [] []数组?

你应该使用一个ArrayList

首先,您创建数据持有人:

ArrayList<Object[]> data = new ArrayList<Object[]>();

然后,您逐行遍历resultSet并在每次要保存行时创建一个新的Object []数组。 表中的项目数应为行中的列数:

while(rs.next()){
    Object[] row = new Object[]{rs.getInt(1), 
                    rs.getString(2), 
                    rs.getString(3), 
                    rs.getString(4),
                    rs.getDouble(5),
                    rs.getInt(6),
                    rs.getInt(7)};
    data.add(row);
}
Object[][] realData = data.toArray(new Object[data.size()][]);

如果您将SQL查询更改为不使用'*'并仅列出字段,那也很好。

当我在上一个答案中开始时。

您可能不知道事先有多少行来自数据库。 您可以使用一些技术,但是它们只是充其量(请注意,自从我使用JDBC以来已经有一段时间了)。

在不预先知道行数的情况下,您需要某种动态数组。 很有趣,Java提供了一个。 它称为ArrayList 这使您可以向其中添加元素,而无需知道实际需要多少个元素。

其次,我将行结果存储在一个最能代表该对象的对象中,这将大大降低数据结构的复杂性,并使更改代码中的更改变得容易,导致列x将成为您的值的时间长度。期待...

就像是

public class Inventory {

    private int id;
    private String name;
    private String catagory;
    private String description;
    private double  price;
    private int stock;
    private int supply;

    public Inventory(int id, String name, String catagory, String description, double price, int stock, int supply) {
        this.id = id;
        this.name = name;
        this.catagory = catagory;
        this.description = description;
        this.price = price;
        this.stock = stock;
        this.supply = supply;
    }

    public void setCatagory(String catagory) {
        this.catagory = catagory;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public void setStock(int stock) {
        this.stock = stock;
    }

    public void setSupply(int supply) {
        this.supply = supply;
    }

    public String getCatagory() {
        return catagory;
    }

    public String getDescription() {
        return description;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }

    public int getStock() {
        return stock;
    }

    public int getSupply() {
        return supply;
    }

}

例如。

我会将这些信息存储到列表中

List<Inventory> inventoryList = new ArrayList<Inventory>(50); // This is a "seed" value to helps performance
while(rs.next()){
    Inventory inventory = new Inventory(rs.getInt(1),
        rs.getString(2),
        rs.getString(3),
        rs.getString(4),
        rs.getDouble(5),
        rs.getInt(6),
        rs.getInt(7))
    inventoryList.add(inventory);
}

基本上从那里开始,我很想简单地使用列表。 这意味着您可能需要实现我们自己的AbstractTableModel ,但从长远来看,它将对您更加有用

确保使用适当的行数和列数初始化data的大小。 要获取行数,您可以按照此处设置的步骤进行操作。 为了获得列数,可以在JavaDocs上找到答案。

这样,您可以删除上面的循环之一。 只剩下你

final int columnCount = rs.getMetaData().getColumnCount();
int row = 0;
while(rs.next()) {
   for(int index = 0; index < columnCount; index ++) {
      data[row][index] = rs.getObject(index);
   }
   row ++;
}

或者代替使用Object[][] ,使用List<Model>其中Model遵循MVC架构。

使用java.util.collection Vectors将解决您的问题.....

看到这个很好的例子:

http://chang.advits.com/populate-data-from-database-into-jtable-in-netbeans

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM