我正在用数据库中的数据填充JTable。我已经将AbstractTableModel子类化并传递了对JTable的引用。但是,如何设法在数据库中提取列名并在JTable中将它们设置为“标题”?
提前致谢。
我已经有了这个,在控制台中显示了头名,但我在GUI中没有列。我已将JTable附加到选项卡式窗格中的选项卡。
@Override
public String getColumnName(int column) {
try {
System.out.println(dbhandler.getMetaData().getColumnName(column + 1));
return dbhandler.getMetaData().getColumnName(column + 1);
} catch (SQLException e) {
e.printStackTrace();
return "";
}
}
答案 0 :(得分:5)
但是,如何设法在数据库中提取列名并在JTable中将它们设置为“标题”?
您的表模型需要实现getColumnName()方法。然后,您需要首先使用数据创建表模型。然后使用表模型创建JTable,表格将为您构建列。
请参阅Table from Database以获取可重复使用的表模型的代码,以及自动为您填充表格的方法。
我根本没有任何列,它都是行......
您需要将表添加到JScrollPane(而不是JPanel),标题将显示为滚动窗格的列标题视图:
JScrollPane scrollPane = new JScrollPane( table );
答案 1 :(得分:1)
您可以通过覆盖AbstractTableModel的getColumnName(int i)方法来完成此操作,并将此“标题”字符串放在此方法中。
答案 2 :(得分:1)
您如何获取数据?使用“SELECT * FROM foo”?
接口:java.sql.DatabaseMetaData
getColumns(String catalog,String schemaPattern,String tableNamePattern,String columnNamePattern) 检索可用的表列的描述 指定目录。
答案 3 :(得分:1)
您是否也覆盖了getColumnCount?
答案 4 :(得分:1)
private void getColumnsFromDB (Connection connection, String tname) throws SQLException
{
String query = "SELECT * FROM " + tname;
Statement stmt = connection.createStatement ();
ResultSet res = stmt.executeQuery (query);
ResultSetMetaData rsmd = res.getMetaData ();
int numberOfColumns = rsmd.getColumnCount ();
boolean searchable = rsmd.isSearchable (1);
if (searchable)
{
for (int j = 1; j <= numberOfColumns; ++j)
{
Column col = new Column (tname, rsmd, j);
// do something with Column (col);
}
}
}
Class Column,Ctor:
public Column (String t, ResultSetMetaData rsmd, int j) throws SQLException
{
table = t;
name = rsmd.getColumnName (j);
schema = rsmd.getSchemaName (j);
precision = -1;
try
{
precision = rsmd.getPrecision (j);
}
catch (NumberFormatException nfe)
{
System.err.println ("nfe[gtd]: " + nfe + " " + t.getName () + "." + name);
}
scale = rsmd.getScale (j);
catName = rsmd.getCatalogName (j);
coltype = rsmd.getColumnType (j);
coltypeName = rsmd.getColumnTypeName (j);
int nulling = rsmd.isNullable (j);
nullable = NULLTYP [nulling];
}
我希望它有效,因为这段代码是更大代码库的一部分,而且很久以前我就用它了。