2016-10-01 14 views
4

現在、NetBeans IDEでプログラムを開発中です。私は素敵なGUIを作成して、MS Accessデータベースを作成しました。 JTableにMS Accessデータを表示する際に問題があります。多くのチュートリアルで示されているように、私はインターネット上にあるベクトルの使用を避けたいと思います。私はまだ高校に在籍しており、この知識は私を超えています。MS AccessデータベースからのデータをJTableに表示するには?

正しい方向のポインタは非常に高く評価されます! JDK 8で

String[] columnNames = {"First Name", 
           "Last Name", 
           "Category", 
           "Amount" 
           }; 
    Object[] row =new Object[4]; 
    JLabel lbl=new JLabel("Add New Property"); 
    lbl.setBounds(100,200,200,100); 
    lbl.setVisible(true); 
    invntryfrm.add(lbl); 
    //invntryfrm.setVisible(true); 
    JPanel panel=new JPanel(); 
    panel.setBounds(20,200,680,100); 
    panel.setBackground(Color.WHITE); 
    invntrybck.add(panel); 
    DefaultTableModel model=new DefaultTableModel(); 
    model.setColumnIdentifiers(columnNames); 
    JTable tabel=new JTable(); 
    tabel.setBounds(100,20,700,400); 
    tabel.setBackground(Color.DARK_GRAY); 
    tabel.setForeground(Color.WHITE); 
    tabel.setModel(model); 
    tabel.setPreferredScrollableViewportSize(new Dimension(500,50)); 
    tabel.setFillsViewportHeight(true); 
    JScrollPane pane=new JScrollPane(tabel); 
    panel.add(pane); 
    try{ 
    Connection conn=DriverManager.getConnection("jdbc:ucanaccess://C:\\Users\\MUHAMMAD SHAHAB\\real estate.accdb"); 
    String sql="select Username,Password,Country,City from simba"; 
    PreparedStatement pst=conn.prepareStatement(sql); 
    ResultSet rs=pst.executeQuery(); 

    } 
    catch(Exception ex) 
    { 
     JOptionPane.showMessageDialog(null, ex); 
    } 
+0

rs2xml.jarを使用する必要があります。@ http://stackoverflow.com/questions/27679867/jtable-how-to-use-rs2xmlこれは、jTableで結果セットをレンダリングする最も簡単な方法です。 –

+1

* "私は問題を抱えています.." *何が問題なの?コマンドラインアプリでデータを取得できますか?ハードコードされたデータからテーブルを作成できますか?今は詳細ではなく、より詳細な情報を得る良い機会です。一般的なヒント:1)すぐに役立つように、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。 2)Java GUIは、異なるロケールで異なるPLAFを使用する異なるOS、画面サイズ、画面解像度などで動作する必要があります。 .. –

+1

..このように、ピクセル完全レイアウトには役立ちません。代わりに、レイアウトマネージャや[それらの組み合わせ](http://stackoverflow.com/a/5630271/418556)と[空白](http://stackoverflow.com/a/17874718/)のレイアウトパディングとボーダーを使用してください。 418556)。 3)DBの照会が実行されると、スターアップでテーブルを追加してモデルを作成して設定します。 GUIの作成後にコンポーネントを追加することは、独自の課題を提示します。 –

答えて

6

(1)1次回は、あなたのライブラリフォルダにrs2Xml.jarを追加して、あなたのコードを次のように変更を実行します。

Connection conn=DriverManager.getConnection("jdbc:ucanaccess://C:\\Users\\MUHAMMAD SHAHAB\\real estate.accdb"); 
           String sql="select Username,Password,Country,City from simba"; 
           PreparedStatement pst=conn.prepareStatement(sql); 
           ResultSet rs=pst.executeQuery(); 
           tabel.setModel(DbUtils.resultSetToTableModel(rs)); 

私はこれがうまくいくことを望みます。

2
import java.awt.Container; 
import java.awt.Dimension; 
import java.awt.FlowLayout; 

import static java.lang.System.out; 

import java.sql.Connection; 

import java.sql.DriverManager; 

import java.sql.ResultSet; 

import java.sql.ResultSetMetaData; 

import java.sql.Statement; 

import javax.swing.JFrame; 

import javax.swing.JScrollPane; 

import javax.swing.JTable; 

import javax.swing.table.DefaultTableModel; 

public class JavaApplication16 { 



public static void main(String[] args) { 


    String driver="org.apache.derby.jdbc.ClientDriver"; 
    String url="jdbc:derby://localhost:1527/simbadb"; 
    String username="simbadb", password="simbadb"; 

    Connection con=null; 
    try 
    { 
     Class.forName(driver); 
     con=DriverManager.getConnection(url, username, password); 
     String query="select * from simba"; 
     Statement stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, 
       ResultSet.CONCUR_READ_ONLY); 

     int rowcount=0; 
     ResultSet rs=stmt.executeQuery(query); 
     ResultSetMetaData rsmd=rs.getMetaData(); 
     int columncount=rsmd.getColumnCount(); 

     while(rs.next()) 
     { 
      rowcount++; 
     } 
     out.println("number of records: "+rowcount); 

     String[][] rowdata=new String[rowcount][columncount]; 
     rs.beforeFirst(); 
     int rowindex=0; 
     while(rs.next()) 
     { 
      int columnindex=0; 
      for(int i=1;i<=columncount;i++) 
      { 
       rowdata[rowindex][columnindex]=rs.getString(i); 
       columnindex++; 
      } 
      rowindex++; 
     } 

     String[] coldata=new String[columncount]; 
     int colindex=0; 
     for(int i=1;i<=columncount;i++) 
     { 
      coldata[colindex]=rsmd.getColumnName(i); 
      colindex++; 
     } 
     rs.close(); 

     DefaultTableModel dtm=new DefaultTableModel(rowdata, coldata); 

     JFrame frame=new JFrame(); 

     JTable table=new JTable(); 
     table.setModel(dtm); 

     Container c=frame.getContentPane(); 
     c.setLayout(new FlowLayout(FlowLayout.LEFT)); 
     c.add(new JScrollPane(table)); 

     frame.setSize(new Dimension(500, 500)); 
     frame.setVisible(true); 
    } 
    catch(Exception e) 
    { 
     out.println(e); 
    } 
    finally 
    { 
     try 
     { 
      if(con!=null) 
      { 
       con.close(); 
       out.println("closed"); 
      } 
     } 
     catch(Exception e) 
     { 
      out.println(e); 
     } 


    } 

} 

} 


JdbcOdbcDriverがサポートされ、除去されていません。

は、ここに私のコードです!だから私は derbyデータベースでそれをテストしなければなりません。
netbeansはderbyデータベースのideとしても使えるので、それを使用することができます
私はベクトルやコレクションタイプの代わりに配列を使用しました!あなたが理解しやすいかもしれないことを願っています。
DefaultTableModelは、TableModelインターフェイスを継承するクラスです。 実際にスイングコンポーネントは、すべてのコンポーネントのModelインターフェイスがあるMVCアーキテクチャに基づいています。
DefaultTableModelクラスは、TableModelインターフェイスのコントラクト/プロバイダクラスであり、行と列のデータを入力するために使用されるオーバーロードされたコンストラクタを含んでいます。
あなたは私の注意を理解してくれることを願います!すべての問題は、その後のplzで私にメールして自由に感じる場合:


[email protected]

関連する問題