如何迭代单帧中UI中显示的DataBase中的多个数据?

时间:2014-11-19 10:02:07

标签: java swing user-interface jframe

假设我在数据库中有一些数据,而我正在使用查询检索它。

示例:

SELECT  * FROM acsuserdetail where "+useranme+"= '"+arg+"' "
System.out.print(" FirstName = " + rs.getString("FirstName"));

这将返回两个结果,即:

FirstName = Anurag
FirstName = Arvind

但是当我在UI中以JFrame显示此数据时,它会打开两个具有两个细节的帧,如果有更多细节,则会打开该帧数。这可能是因为来自数据库的数据一个接一个地出现。我希望所有信息都在一个框架中进行整合。 UI代码是: -

public UIForShowingData(String data) {
    frame = new JFrame("Showing Data");
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.setVisible(true);
    frame.setSize(300, 300);
    button = new JButton("OK");
    frame.setLayout(null);
    button.setBounds(250, 250, 40, 50);
    frame.add(button);
    System.out.println(data.length());
    tx = new JTextField(data);
    frame.add(tx);
    tx.setBounds(50, 50, 40, 50);
    button.addActionListener(new ActionListener() {    
        @Override
        public void actionPerformed(ActionEvent arg0) {
            frame.dispose();        
        }
    });
}

1 个答案:

答案 0 :(得分:0)

请注意,根据您的问题中的代码段,目前尚不清楚发生了什么。但是我会在黑暗中拍摄,并猜测通过查询数据库获得的结果集中的每条记录都会调用UIForShowingData(String data)方法。

这样的事情:

while (rs.next()) {
    ...
    UIForShowingData ui = new UIForShowingData(rs.getString("FirstName"));
    ...
}

这可以解释为什么在数据库中存在记录时打开了许多帧。要解决此问题,您可以考虑使用Collection存储多个值,并使用此集合在单个JFrame中正确显示数据。可能使用JListJTable比使用文本字段显示记录更好。


题外话

请注意,您的查询容易受SQL injection次攻击。为避免这种情况,您可能需要尝试使用PreparedStatement。例如:

String query = "SELECT  * FROM acsuserdetail where useranme = ?";
PreparedStatement pst = connection.prepareStatement(query);
pst.setString(arg); // where arg is the argument to compare with
ResultSet rs = pst.executeQuery();

Swing旨在与Layout Managers一起使用,因此不鼓励使用null布局和方法,例如setBounds(...)setLocation(...)setXxxSize(...)。来自Swing tutorials

  

虽然可以不使用布局管理器,但您应该使用   布局经理,如果可能的话。布局管理器使其更容易   调整依赖于外观和感觉的组件外观   不同的字体大小,容器的大小变化,以及不同的   语言环境。布局管理器也可以被其他人轻松重用   容器,以及其他程序。

另见这些主题: