Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 结果集在更新行后消失_Java_Database_Ms Access_Jdbc_Ucanaccess - Fatal编程技术网

Java 结果集在更新行后消失

Java 结果集在更新行后消失,java,database,ms-access,jdbc,ucanaccess,Java,Database,Ms Access,Jdbc,Ucanaccess,我能找到的唯一一件与我的问题有点相似的事情是这个,然而他的问题似乎是由于用户错误引起的。 我的问题如下:更新一行后,我无法访问结果集中的任何其他行。更新本身工作正常,但是如果我想继续,我必须重新启动应用程序 代码如下: package database; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.sql.ResultSet; import java.sql.SQLExceptio

我能找到的唯一一件与我的问题有点相似的事情是这个,然而他的问题似乎是由于用户错误引起的。

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

代码如下:

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) {}
        }
    }
此外:

System.out.println(rs.getRow())的输出为“0”

如果我想在更新后单击“下一步”按钮,则会显示消息“无下一步记录”

我试过使用
rs.first()
rs.beforeFirst()
rs.isBeforeFirst()
,但都没有成功

如果有帮助,我将遵循本教程,它不会遇到相同的问题:


我可以用UCanAccess 3.0.4重现您的问题。你没有做错任何事;这种行为似乎与HSQLDB当前处理可更新结果集的方式有关。我可以用UCanAccess 3.0.4重现您的问题。你没有做错任何事;该行为似乎与HSQLDB当前处理可更新结果集的方式有关。
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();
    }
}