更新行后ResultSet消失

时间:2016-03-13 15:47:37

标签: java database ms-access jdbc ucanaccess

我能找到的唯一与我的问题远近相似的是这个,但他的问题似乎来自用户错误。 Reset cursor position after ResultSet updateRow

我的问题如下:更新行后,我无法访问ResultSet中的任何其他行。更新本身工作正常,但如果我想继续,我必须重新启动应用程序。

以下是代码:

package database;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Gui extends MyDB {
    JFrame f;
    JLabel FName;
    JLabel LName;
    JLabel Age;
    JTextField t;
    JTextField t2;
    JTextField t3;
    JButton next = new JButton("next");
    JButton update = new JButton("Update");

    public Gui() {
        frame();
        start();
        btnAction();
    }

    public void frame() {
        f = new JFrame();
        f.setVisible(true);
        f.setSize(680, 480);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        FName = new JLabel("Name");
        LName = new JLabel("Anrede");
        Age = new JLabel("age");
        t = new JTextField(10);
        t2 = new JTextField(10);
        t3 = new JTextField(10);
        JPanel p = new JPanel();
        p.add(FName);
        p.add(t);
        p.add(LName);
        p.add(t2);
        p.add(Age);
        p.add(t3);
        p.add(b1);
        p.add(update);

        public void btnAction() {
            next.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    try {
                        if (rs.next()) {
                            t.setText(rs.getString("FName"));
                            t2.setText(rs.getString("LName"));
                            t3.setText(rs.getString("Age"));
                        } else {
                            rs.previous();
                            JOptionPane.showMessageDialog(null, "no next records");
                        }
                    } catch (Exception ex) {}
                }
            });

            update.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    String FName = t.getText();
                    String LName = t2.getText();
                    String Age = t3.getText();
                    try {
                        System.out.println(rs.getRow());
                        rs.updateString("FName", FName);
                        rs.updateString("LName", LName);
                        rs.updateString("Age", Age);
                        rs.updateRow();
                        //System.out.println(rs.getString("FName"));
                        System.out.println(rs.getRow());
                        JOptionPane.showMessageDialog(null, "Record updated ");
                    } catch (Exception ex) {
                        System.out.println("no");
                    }
                }
            });
        }

        public void start() {
            try {
                if (rs.next()) {
                    t.setText(rs.getString("FName"));
                    t2.setText(rs.getString("LName"));
                    t3.setText(rs.getString("Age"));
                } else {
                    rs.previous();
                    JOptionPane.showMessageDialog(null, "no next records");
                }
            } catch (Exception ex) {}
        }
    }

此外:

package database;

import java.sql.*;

public class MyDB {
    Connection con;
    Statement st;
    ResultSet rs;

    public MyDB() {
        connect();
    }

    public void connect() {
        try {
            String db = "jdbc:ucanaccess://Datenbank1.accdb";
            con = DriverManager.getConnection(db);
            st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
            String sql = "select * from Tabelle1";
            rs = st.executeQuery(sql);
        } catch (SQLException ex) {
            ex.printStackTrace(System.out);
        }
    }

    public static void main(String[] args) {
        new Gui();
    }
}

System.out.println(rs.getRow());的输出为' 0'。

如果我想点击下一个'更新后的按钮,消息"没有下一条记录"显示。

我尝试过使用rs.first()rs.beforeFirst()rs.isBeforeFirst(),但都没有效果。

如果有帮助,我正在按照本教程进行操作,该教程没有遇到同样的问题:

https://www.youtube.com/watch?v=NPV2o6YjP10

0 个答案:

没有答案