[英]How to determine Column Count from a Java ResultSet?
I want to display SQLdata in a jtable
. 我想在jtable中显示jtable
。 The first step is to create a tablemodel
: 第一步是创建一个tablemodel
:
public DefaultTableModel createTableModel(String sqlStatement) {
int rowCount = 0;
int colCount = 0;
Vector data = new Vector();
Vector columnnames = new Vector();
String sql = sqlStatement;
try {
open();
ResultSet rs = befehl.executeQuery(sql);
ResultSetMetaData metaData = rs.getMetaData();
for(int i = 1; i<=metaData.getColumnCount();i++)
columnnames.add(metaData.getColumnName(i));
DefaultTableModel model = new DefaultTableModel(null,columnnames);
close();
return model;
} catch (SQLException e) {
e.printStackTrace();
close();
return null;
}
}
This works fine if my SQL statement selects the whole table: SELECT* FROM test;
如果我的SQL语句选择整个表,这可以正常工作: SELECT* FROM test;
, but if I want to display only the first two columns, Select ColumnName1, ColumName2 from test;
,但如果我只想显示前两列,请Select ColumnName1, ColumName2 from test;
, I get an ArrayIndexOutOfBoundsException
. ,我得到一个ArrayIndexOutOfBoundsException
。 I always thought columncount
depends on the resultSet
, which depends on the sql statement. 我一直认为columncount
取决于resultSet
,它依赖于sql语句。 How do I get the correct columncount
? 我如何获得正确的columncount
?
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4 >= 2
at java.util.Vector.elementAt(Vector.java:470)
at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:294)
at sun.swing.SwingUtilities2.convertColumnIndexToModel(SwingUtilities2.java:1841)
at javax.swing.JTable.convertColumnIndexToModel(JTable.java:2585)
at javax.swing.JTable.getValueAt(JTable.java:2720) at Main.KassePanel.<init>(KassePanel.java:186)
at Main.Main.<init>(Main.java:36) at Main.Main.main(Main.java:20)
You should use DatabaseMetaData instead of ResultSetMetaData . 您应该使用DatabaseMetaData而不是ResultSetMetaData 。 I 've completed a java project named dbproxy which is designed to manipulate and access relational database's structure (metadata). 我已经完成了一个名为dbproxy的java项目,它旨在操作和访问关系数据库的结构(元数据)。 I will make it an opensource project soon. 我很快就会把它变成一个开源项目。 See my code: 看我的代码:
@Override
public List<ColumnDetail> getColumns(String table) throws SQLException {
List<ColumnDetail> columnList = new ArrayList<ColumnDetail>();
ResultSet resultSet = null;
String catalog = getCatalog();
String schema = getSchema();
try {
DatabaseMetaData databaseMetaData = connection.getMetaData();
if(databaseMetaData == null) {
return columnList;
}
resultSet = databaseMetaData.getColumns(catalog, schema, table, null);
if(resultSet == null) {
return columnList;
}
while(resultSet.next()) {
columnList.add(extractColumnDetail(resultSet));
}
}
catch (SQLException e) {
throw new SQLException("Could not get columns: " + e.toString());
}
catch (Exception e) {
throw new SQLException("Could not get columns: " + e.toString());
}
finally {
DatabaseUtil.close(resultSet);
}
return columnList;
}
Reference Apress.JDBC.Metadata.MySQL.and.Oracle.Recipes.A.Problem.Solution.Approach.Mar.2006 参考Apress.JDBC.Metadata.MySQL.and.Oracle.Recipes.A.Problem.Solution.Approach.Mar.2006
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.