2017-03-02 186 views
0

我想在访问表格时显示列名称行。在这里我尝试了这个代码......但只有表格没有列名称显示。 用java蚀和SQLite数据库从列表中获取列名称

try 
    { 
     String query="Select * from client"; 
     PreparedStatement pst=conn.prepareStatement(query); 
     ResultSet rs=pst.executeQuery(); 

     ResultSetMetaData rsmd = rs.getMetaData(); 
     int columnCount = rsmd.getColumnCount(); 

     DefaultTableModel tm = (DefaultTableModel) table.getModel(); 

     for(int i=1;i<=columnCount;i++) 
     { 
      tm.addColumn(rsmd.getColumnName(i)); 
     } 

     while (rs.next()) 
     { 
      String[] a = new String[columnCount]; 
      for(int i = 0; i < columnCount; i++) 
      { 
       a[i] = rs.getString(i+1); 

      } 
      tm.addRow(a); 
    //  tm.fireTableDataChanged(); 

      rs.close(); 
      pst.close(); 
     } 
    } 

     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
} 
+1

我认为(但我不确定你所要求的)是对'resultSetToTableModel'代码可以帮助你得到一个答案 – 2017-03-02 12:41:04

回答

1
String column_i = table.getModel().getColumnName(i); 

迭代通过的 'i';因为它代表了该列的索引。 干杯!

+0

我尝试了.............. ........... int i = 0; 字符串column_i = table.getModel()getColumnName(I); ................没有爵士以显示表 –

2

ResultSet始终包含返回的行,但不包含列名。

要获得列名,您可以使用下面的代码。

ResultSetMetaData metadata = rs.getMetaData(); 

int columnCount = metadata.getColumnCount(); 

String column_names[] = new String[ columnCount ]; // define a array to store the column names 

for (int i=0; i<=columnCount; i++) { 

    column_names[ i ] = metadata.getColumnLabel(i); // push column names into array 
} 

DefaultTableModel table_model = new DefaultTableModel(column_names, columnCount); // create a table model based of the columns and column count 

table=new JTable(table_model); // create a new table with that model 
+0

谢谢先生......但得到错误... java.lang.ArrayIndexOutOfBoundsException:11 –

+0

@GS我的坏错字错误。只是初始化'I = 0'代替'I = 1' –

+0

拉维先生,还是同样的错误 –

3

您可以使用下面的代码来获得列名:

ResultSetMetaData metaData = rs.getMetaData(); 
int count = metaData.getColumnCount(); // get column count 

for (int i = 1; i <= count; i++){ 
    System.out.println(metaData.getColumnLabel(i)); 
} 
+0

先生你的问题,通过在控制台上显示的SOP ......但要显示使用JTable组件的摆动表...所以我必须使用哪种方法而不是s.o.p? –

+0

hello @ G.S ..请通过http://stackoverflow.com/questions/21898053/display-records-from-mysql-database-using-jtable-in-java它会帮助你。 –

0
JScrollPane pane = new JScrollPane(table); 
contentPane.add(table); 
JscrollPane.add(table); 

上面的代码是所有困惑:

  1. 首先创建使用该表中的滚动窗格(这是正确的),但是然后将表添加到内容窗格(这是不正确的)。一个表只能有一个父母,所以它从滚动窗格中被移除。

  2. 然后,您尝试将表格添加回滚动窗格,因为您需要将表格添加到滚动窗格的viewport而不是直接滚动窗格,因此无法工作。

所以底线所有你需要的是:

JScrollPane pane = new JScrollPane(table); 
//contentPane.add(table); 
//JscrollPane.add(table); 

编辑:

首先得到的代码没有SQL工作。使用上述建议,然后更改当前的代码:

//table.setModel(DbUtils.resultSetToTableModel(rs)); 
table.setModel(new DefaultTableModel(5,5)); 

这应与5行5列显示一个空表。

  1. 如果您看到表格,那么问题出在您的SQL上,您将返回一个空的ResultSet。

  2. 如果你没有看到表格,那么你的代码在其他地方有问题。

+0

我做了...但没有显示表...在这里,我通过使用JTable –

+0

@ G.S直接形成摆动表,请参阅编辑。您需要通过简化问题来进行一些基本的调试。 – camickr

+0

@camickr ...我得到整个表与所有数据...但只有头部分(其中列名在那里)不显示..即使没有得到 –