如何在JTable中显示来自MS Access数据库的数据?
问题描述:
我目前正在NetBeans IDE中开发一个程序。我创建了一个很好的GUI,并且创建了我的MS Access数据库。我在JTable
中显示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));
我希望这会适合你。
答
在JDK 8 JdbcOdbcDriver不支持并删除!所以我必须在 德比数据库中测试它。
netbeans也可以用作derby数据库的ide,因此您可以使用它
我已经使用了数组来代替矢量或任何集合类型!希望你可以很容易理解。
DefaultTableModel是继承TableModel接口的类。 实际上,swing组件基于MVC架构,其中每个组件都有Model接口。
DefaultTableModel类是TableModel接口的契约/提供者类,并且包含用于向其中填充行和列数据的重载构造函数。
希望你能理解我的笔记!如果有问题,那么PLZ随时寄给我:
[email protected]
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不支持并删除!所以我必须在 德比数据库中测试它。
netbeans也可以用作derby数据库的ide,因此您可以使用它
我已经使用了数组来代替矢量或任何集合类型!希望你可以很容易理解。
DefaultTableModel是继承TableModel接口的类。 实际上,swing组件基于MVC架构,其中每个组件都有Model接口。
DefaultTableModel类是TableModel接口的契约/提供者类,并且包含用于向其中填充行和列数据的重载构造函数。
希望你能理解我的笔记!如果有问题,那么PLZ随时寄给我:
[email protected]
请参考回答@ http://stackoverflow.com/questions/27679867/jtable-how-to-use-rs2xml你需要使用rs2xml.jar。这是在jTable中呈现结果集的最简单方法。 –
*“我有问题..”*确切地说有什么问题?你可以在命令行应用程序中检索数据吗?你可以用硬编码数据创建表格吗?现在是更多细节的好时机,而不是更少。一般提示:1)为了更快地提供更好的帮助,请发布[MCVE]或[简短,独立,正确的示例](http://www.sscce.org/)。 2)Java GUI必须在不同的语言环境中使用不同的PLAF来处理不同的操作系统,屏幕大小,屏幕分辨率等。 .. –
..因此,它们不利于像素的完美布局。请使用布局管理器或[它们的组合](http://stackoverflow.com/a/5630271/418556)以及[white space]的布局填充和边框(http://stackoverflow.com/a/17874718/ 418556)。 3)我会在star-up中添加表格,并且在执行DB查询后简单地创建并设置模型。在创建GUI之后添加组件显示出它自己的一系列挑战。 –