2011-07-01 247 views
0

我试图从我的数据库中检索行并填充表。我不明白问题出在哪里,此代码:从数据库填充表

if ((report.getMsg()=="selectEventoAll") && (report.getEsito()==1)) 
{ 

    DefaultTableModel dtm = new DefaultTableModel(); 
    eventi_tb.setModel(dtm); 

    try 
    { 
     ResultSet res_eventi = report.getRes(); 
     i = 0; 
     Object[][] datiEventi = new Object[report.getRowCount()][5]; 

     while(res_eventi.next()) 
     { 
      j = 0; 
      while (j < 5) 
      { 
       datiEventi[i][j] = res_eventi.getObject(j+2); 
       j++; 
      } 
      dtm.addRow(datiEventi[i]); 
      i++; 
     } 
    } 
+2

我们不明白你的问题,也许你应该分享。 – Woot4Moo

+0

@ haunted85请搜索ResultsetTableModel,TableFromDatabase,然后阅读http://download.oracle.com/javase/tutorial/uiswing/components/table.html示例http://www.java2s.com/Code/Java/Swing -JFC/CatalogSwing-JFC.htm和http://download.oracle.com/javase/tutorial/jdbc/basics/jdbcswing.html :-) @ Woot4Moo +1 :-) – mKorbel

+0

@ Woot4Moo:我需要获取行从我的数据库表中将数据显示到表中。为了实现这一点,我创建了一个DefaultTableModel对象,以便我可以提供一个tableModel。 我使用了一个二维数组来存储表的每一行,while循环就是这样做的。然后 'dtm.addRow(datiEventi [i])' 应让数据显示在表中,但它不起作用。 – haunted85

回答

4

这是一个不好的设计。你将你的用户界面和数据库混合在一起。如果您从Swing更改为Web UI,那么您的代码并不好。这种测试和调试也很难。

将问题分为两部分:数据库访问和Swing显示。

有一个对象只会查询结果并将其加载到数据结构中。

有另一个什么也不做,只是接受一个数据结构并将其加载到你的Swing UI中进行显示。

您的应用程序将使数据库与用户界面分离。您的测试和调试生活将会更轻松。

发布更多的代码,也许错误消息会帮助我们比猜测更快地帮助你。

结果集中列的循环对我来说看起来很可疑。他们从1行到列数,但是你从2开始。为什么?如果您的查询有五列或更少的列,那么您会遇到问题。

+0

+1:我更喜欢MVC –

+0

@OMG Ponies从DAO解耦视图并不意味着它的MVC。我认为,如果没有MVC这个词,就会经常使用它。此外,还有现代的MVC替代品,如果您有兴趣,请参阅Martin Fowler的文章:http://martinfowler.com/eaaDev/uiArchs.html。 – Lynch

+0

另请参见[模型视图演示者模式的退休注释](http://martinfowler.com/eaaDev/ModelViewPresenter.html) – trashgod

1

您确定您的ResultSet包含任何行吗?

您确定在致电addRow之前没有发生一些异常?你在尝试块,catch块做什么?