在jdbc应用程序中向前移动rs.next()

时间:2014-10-15 16:25:17

标签: java swing jdbc

我正在使用在线检查软件,该软件使用JDBC ODBC连接连接到Ms Sql服务器。我想将结果集光标移动到下一行和后一行。连接有效,程序可以从数据库中检索字段,因此没有问题。

我这里的代码是一个标有"提交"的按钮。单击此按钮时,它应移动到数据库中的下一行并从该行检索数据。检索到的数据应显示在" textarea"中。问题是,当我点击下一步它显示最后的结果?

class Abc extends JFrame implements ActionListener
{

    JLabel      l1, l2, l3, l4;
    JButton     b1, b2;
    JTextArea   j1, j2;
    JCheckBox   c1, c2, c3, c4;
    ButtonGroup group   = new ButtonGroup();

    JPanel      panel2;

    Abc ()
    {
        j1 = new JTextArea();
        j2 = new JTextArea();
        c1 = new JCheckBox();
        c2 = new JCheckBox();
        c3 = new JCheckBox();
        c4 = new JCheckBox();
        j1.setEditable(false);
        c1.setSelected(false);
        c2.setSelected(false);
        c3.setSelected(false);
        c4.setSelected(false);

        group.add(c1);
        group.add(c2);
        group.add(c3);
        group.add(c4);

        Connection conn = null;
        try
        {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            conn = DriverManager.getConnection(
                    "jdbc:oracle:thin:@localhost:1521:xe", "system",
                    "java");
            System.out.println("Dc is obtained");

        }
        catch (Exception e2)
        {
            System.out.println("conne" + e2.getMessage());
        }
        try
        {
            String sq = "select * from questionans";
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery(sq);
            System.out
                    .println("------------------------------------------");
            if (rs.next())
            {

                j1.setText(rs.getString(2));
                c1.setText(rs.getString(3));
                c2.setText(rs.getString(4));
                c3.setText(rs.getString(5));
                c4.setText(rs.getString(6));
            }
            System.out
                    .println("-------------------------------------------");
        }
        catch (Exception e1)
        {
            System.out.println("query" + e1.getMessage());
        }
        finally
        {
            try
            {
                conn.close();
            }
            catch (Exception e)
            {
                System.out.println("close conn" + e.getMessage());
            }
        }

        b1 = new JButton("REGISTER");
        b2 = new JButton("SUBMIT");
        panel2 = new JPanel(new GridLayout(4, 1));
        panel2.add(b1);
        panel2.add(j1);
        panel2.add(c1);
        panel2.add(c2);
        panel2.add(c3);
        panel2.add(c4);
        panel2.add(b2);

        add(panel2, BorderLayout.CENTER);
        b1.addActionListener(this);
        b2.addActionListener(this);
        setTitle("REGISTRATION");

    }

    public void actionPerformed (ActionEvent e)
    {
        Object source = e.getSource();
        if (source == b1)
        {
            System.out.println("you pressed button b1");
        }
        else if (source == b2)
        {

            Connection conn = null;

            try
            {
                Class.forName("oracle.jdbc.driver.OracleDriver");
                conn = DriverManager.getConnection(
                        "jdbc:oracle:thin:@localhost:1521:xe", "system",
                        "java");
                System.out.println("Dc is obtained");

            }
            catch (Exception e4)
            {
                System.out.println("conne" + e4.getMessage());
            }
            try
            {
                String sq = "select * from questionans";
                Statement st = conn.createStatement();
                ResultSet rs = st.executeQuery(sq);
                System.out
                        .println("------------------------------------------");

                while (rs.next())
                {

                    j1.setText(rs.getString(2));
                    c1.setText(rs.getString(3));
                    c2.setText(rs.getString(4));
                    c3.setText(rs.getString(5));
                    c4.setText(rs.getString(6));

                }

                System.out
                        .println("-------------------------------------------");
            }
            catch (Exception e3)
            {
                System.out.println("query" + e3.getMessage());
            }
            finally
            {
                try
                {
                    conn.close();
                }
                catch (Exception e6)
                {
                    System.out.println("close conn" + e6.getMessage());
                }
            }

            String s2 = "";
            if (c1.isSelected())
            {
                s2 = s2 + "" + c1.getText();
            }
            else if (c2.isSelected())
            {
                s2 = s2 + "" + c2.getText();
            }
            else if (c3.isSelected())
            {
                s2 = s2 + "" + c3.getText();
            }
            else if (c4.isSelected())
            {
                s2 = s2 + "" + c4.getText();
            }

            System.out.println("You clicked on " + s2);
        }
    }

}

class xyz
{
    public static void main (String args[])
    {
        Abc a = new Abc();
        a.setSize(1000, 1000);
        a.setVisible(true);
        a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

}

2 个答案:

答案 0 :(得分:2)

ResultSet的每次迭代都会重置JTextArea组件中的文本。你可以做到

jTextArea1.append(rs.getString(2) + System.getProperty("line.separator"));

答案 1 :(得分:2)

它显示最后一个结果,因为你循环遍历所有结果:

while (rs.next())
{
    j1.setText(rs.getString(2));
    c1.setText(rs.getString(3));
    c2.setText(rs.getString(4));
    c3.setText(rs.getString(5));
    c4.setText(rs.getString(6));
}

应该在侦听器之外检索ResultSet,将这些变量public声明为您的类并在构造函数中初始化它们:

String sq = "select * from questionans";
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sq);

将while语句更改为侦听器中的if:

if(rs.next())
{
    j1.setText(rs.getString(2));
    c1.setText(rs.getString(3));
    c2.setText(rs.getString(4));
    c3.setText(rs.getString(5));
    c4.setText(rs.getString(6));
}

每次单击“提交”时,它都会显示之前检索到的ResultSet的下一个结果。

这也会提供更好的性能,因为每次单击提交时都不会执行select语句。