Java DefaultDataTable 动态值
Java DefaultDataTable dynamic values
我有一个 JTable,我想使用 DefaultTableModel 来填充,不幸的是,我的输出是数组,而不是我希望的新行。请在下面查看我的代码,并询问是否需要任何进一步的解释! :)
dataTable.setModel(new javax.swing.table.DefaultTableModel(new Object [][] {
DatabaseInteraction.getCityInfo("").get("datas").toArray()
},
DatabaseInteraction.getCityInfo("").get("columns").toArray()));
这里是数据库交互函数:
public static Map<String,List<String>> getCityInfo(String query )
{
if(query.isEmpty()){
query = "SELECT * FROM "+ database+ "." +table;
}
try {
Statement stmt = getConn().createStatement();
ResultSet rs;
rs = stmt.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();
//Get Column names
List<String> cNames = new ArrayList();
List<Object> results = new ArrayList<Object>();
for (int i = 1; i <= rsmd.getColumnCount(); i++){
cNames.add(rsmd.getColumnName(i));
}
//Get Data
while (rs.next()) {
List<String> tempResults = new ArrayList();
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
tempResults.add(rs.getString(i));
if(i == rsmd.getColumnCount()){
results.add(tempResults);
}
}
}
HashMap map =new HashMap();
map.put("columns",cNames);
map.put("datas",results);
System.out.println(map);
return map;
}
我在控制台中得到的输出是:{columns=[username, password, free], datas=[[hej, hej, 1], [Brugernavn, Password, 1], [Brugernavn1, Password, 0 ], [test1, test2, 1], [ , 1]]} 这对我来说很好,但正如我之前所说,它只是将它附加为数组而不是一个数组 - 新行。
我建议您使用 Vectors 创建自己的 DefaultTableModel。
您可以使用类似的东西:
public static DefaultTableModel createModel(ResultSet rs){
DefaultTableModel dtm = new DefaultTableModel();
Vector rowVectors = new Vector();
Vector columnHeaderVector = new Vector();
//To get rows correctly
int columncount = rs.getMetaData().getColumnCount();
//Iterating all data and creating rows vector
while(rs.next())
{
//It seems confusing to newbies,
//for defaultTableModel we need a vector containing rows(as a vector)
Vector singleRow = new Vector();
for(int i=1;i<=columncount;i++)
{
singleRow.addElement(rs.getObject(i));
}
rowVectors.addElement(singleRow);
}
//Creating header for table
for(int i=1;i<=columncount;i++)
{
columnHeaderVector.addElement(rs.getMetaData().getColumnName(i));
}
//Setting vectors to the model
dtm.setDataVector(rowVectors, columnHeaderVector);
return dtm; }
在您的主要方法中或您创建 JTable 的地方
ResultSet rs;
rs = stmt.executeQuery(query);
DefaultTableModel dtm = createModel(rs);
dataTable.setModel(dtm);
我在这里写的可能有一些错误,应该也是 try/catch 块,但你可以修复并添加它们:)
我有一个 JTable,我想使用 DefaultTableModel 来填充,不幸的是,我的输出是数组,而不是我希望的新行。请在下面查看我的代码,并询问是否需要任何进一步的解释! :)
dataTable.setModel(new javax.swing.table.DefaultTableModel(new Object [][] {
DatabaseInteraction.getCityInfo("").get("datas").toArray()
},
DatabaseInteraction.getCityInfo("").get("columns").toArray()));
这里是数据库交互函数:
public static Map<String,List<String>> getCityInfo(String query )
{
if(query.isEmpty()){
query = "SELECT * FROM "+ database+ "." +table;
}
try {
Statement stmt = getConn().createStatement();
ResultSet rs;
rs = stmt.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();
//Get Column names
List<String> cNames = new ArrayList();
List<Object> results = new ArrayList<Object>();
for (int i = 1; i <= rsmd.getColumnCount(); i++){
cNames.add(rsmd.getColumnName(i));
}
//Get Data
while (rs.next()) {
List<String> tempResults = new ArrayList();
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
tempResults.add(rs.getString(i));
if(i == rsmd.getColumnCount()){
results.add(tempResults);
}
}
}
HashMap map =new HashMap();
map.put("columns",cNames);
map.put("datas",results);
System.out.println(map);
return map;
}
我在控制台中得到的输出是:{columns=[username, password, free], datas=[[hej, hej, 1], [Brugernavn, Password, 1], [Brugernavn1, Password, 0 ], [test1, test2, 1], [ , 1]]} 这对我来说很好,但正如我之前所说,它只是将它附加为数组而不是一个数组 - 新行。
我建议您使用 Vectors 创建自己的 DefaultTableModel。 您可以使用类似的东西:
public static DefaultTableModel createModel(ResultSet rs){
DefaultTableModel dtm = new DefaultTableModel();
Vector rowVectors = new Vector();
Vector columnHeaderVector = new Vector();
//To get rows correctly
int columncount = rs.getMetaData().getColumnCount();
//Iterating all data and creating rows vector
while(rs.next())
{
//It seems confusing to newbies,
//for defaultTableModel we need a vector containing rows(as a vector)
Vector singleRow = new Vector();
for(int i=1;i<=columncount;i++)
{
singleRow.addElement(rs.getObject(i));
}
rowVectors.addElement(singleRow);
}
//Creating header for table
for(int i=1;i<=columncount;i++)
{
columnHeaderVector.addElement(rs.getMetaData().getColumnName(i));
}
//Setting vectors to the model
dtm.setDataVector(rowVectors, columnHeaderVector);
return dtm; }
在您的主要方法中或您创建 JTable 的地方
ResultSet rs;
rs = stmt.executeQuery(query);
DefaultTableModel dtm = createModel(rs);
dataTable.setModel(dtm);
我在这里写的可能有一些错误,应该也是 try/catch 块,但你可以修复并添加它们:)