繁体   English   中英

如何在 JTable 中显示 MS Access 数据库中的数据?

[英]How to display data from MS Access database in a JTable?

我目前正在 NetBeans IDE 中开发一个程序。 我创建了一个不错的 GUI,并且创建了我的 MS Access 数据库。 我在JTable中显示 MS Access 数据时遇到问题。 我想避免使用向量,正如我在互联网上找到的大多数教程所示,因为我还在高中,而且这些知识超出了我的范围。

任何指向正确方向的指针将不胜感激!

这是我的代码:

 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);
   }

(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)); 

我希望这对你有用。

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 还可以用作 derby 数据库的 ide,因此您可以使用它
我用数组代替了向量或任何集合类型! 希望你能容易理解。
DefaultTableModel 是一个继承 TableModel 接口的类。 实际上,swing 组件基于 MVC 架构,其中每个组件都有模型接口。
DefaultTableModel 类是 TableModel 接口的契约/提供者类,包含用于将行和列数据填充到其中的重载构造函数。
希望你能看懂我的笔记! 如果有任何问题,请随时给我发邮件:
alkaramansari1@gmail.com

只需添加
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
在 try Catch 块中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM