2016-10-01 2 views
4

현재 NetBeans IDE에서 프로그램을 개발 중입니다. 좋은 GUI를 만들었고 MS Access 데이터베이스를 만들었습니다. JTable에 MS Access 데이터를 표시하는 데 문제가 있습니다. 대부분의 자습서에서 볼 수 있듯이 나는 인터넷에서 발견되는 벡터의 사용을 피하고 싶습니다. 저는 아직도 고등학생이며이 지식은 저를 넘어선 것입니다.JTable에서 MS Access 데이터베이스의 데이터를 표시하는 방법?

올바른 방향으로 어떤 포인터가 대단히 감사하겠습니다! 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

주어진 답변 @ http://stackoverflow.com/questions/27679867/jtable-how-to-use-rs2xml rs2xml.jar을 사용해야합니다. jTable에서 결과 세트를 렌더링하는 가장 쉬운 방법입니다. –

+1

* "문제가 있습니다."* 정확히 무슨 문제가 있습니까? 명령 줄 앱에서 데이터를 검색 할 수 있습니까? 하드 코딩 된 데이터로 테이블을 만들 수 있습니까? 이제는 세부 사항을 말하기에 좋은시기입니다. 일반적인 팁 : 1) 더 나은 도움을 더 빨리 얻으려면 [MCVE] 또는 [Short, Self Contained, Correct Example] (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) 좁은 방 라이브러리 폴더에 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도 더비 데이터베이스의 ide로 작동하므로 사용 가능합니다.
저는 벡터 또는 컬렉션 유형 대신 어레이를 사용했습니다! 이해하기 쉽기를 바랍니다.
DefaultTableModel은 TableModel 인터페이스를 상속받은 클래스입니다. 실제로 스윙 구성 요소는 모든 구성 요소에 대한 모델 인터페이스가있는 MVC 아키텍처를 기반으로합니다.
DefaultTableModel 클래스는 TableModel 인터페이스의 계약/공급자 클래스이며 행 및 열 데이터를 채우는 데 사용되는 오버로드 된 생성자를 포함합니다.
내 메모를 이해하시기 바랍니다. 문제는 PLZ에서 나에게 메일을 주시기 경우 :


[email protected]

관련 문제