2016-10-01 5 views
4

В настоящее время я разрабатываю программу в среде IDE NetBeans. Я создал хороший графический интерфейс, и я создал свою базу данных MS Access. У меня возникают проблемы с отображением данных MS Access в JTable. Я хотел бы избежать использования векторов, как показано в большинстве учебных пособий, которые я нашел в Интернете, поскольку я все еще в старшей школе, и это знание вне меня.Как отображать данные из базы данных MS Access в JTable?

Любые указатели в правильном направлении будут очень оценены!

Вот мой код:

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 в разных локалях. .. –

+1

.. Таким образом, они не способствуют идеальной компоновке пикселей. Вместо этого используйте диспетчеры макетов или [их комбинации] (http://stackoverflow.com/a/5630271/418556), а также макет и границы для [пробела] (http://stackoverflow.com/a/17874718/ 418556). 3) Я бы добавил таблицу на старте и просто создал и установил модель после выполнения запроса БД. Добавление компонентов после создания 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); 
     } 


    } 

} 

} 


В JDK 8 JdbcOdbcDriver не поддерживается и удалена! поэтому я должен проверить его в базе данных derby.
netbeans также работает как ide для базы данных derby, поэтому вы можете использовать это
Я использовал массивы вместо вектора или любого типа коллекции! надеюсь, вам будет легко понять.
DefaultTableModel - это класс, который наследует интерфейс TableModel. На самом деле компоненты swing основаны на архитектуре MVC, где есть интерфейс Model для каждого компонента.
Класс DefaultTableModel является классом контракта/поставщика интерфейса TableModel и содержит перегруженные конструкторы, которые используются для заполнения данных столбцов и столбцов.
надеюсь, что вы поймете мои заметки! если какие-либо проблемы, то плз, не стесняйтесь, напишите мне по адресу:
[email protected]

Смежные вопросы