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();
}
}