2017-03-02 10 views
0

テーブルにアクセスしているときに列名の行を表示したいとします。ここではこのコードを試してみましたが、列名なしで表のみが表示されました。 'I' を通じて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' 'のコードは、あなたが、私はそれを試してみました答え –

答えて

1
String column_i = table.getModel().getColumnName(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 = 1の代わりに 'i = 0'を初期化してください –

+0

Ravi Sir、まだ同じエラー –

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. まずあなたがテーブルを使用してスクロール区画を作成します(正しいですが)、コンテンツペインにテーブルを追加します(これは間違っています)。テーブルには親が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 ...私はすべてのデータでテーブル全体を取得しますが、ヘッダー部分(列名がそこにあります)は表示されません。 –

関連する問題