[英]create jtable from database using codes and displaying database table records in it
[英]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.