SQLite:java.sql.SQLException:ResultSet是TYPE_FORWARD_ONLY?

时间:2017-09-21 01:48:39

标签: java sqlite jdbc

在我发布问题之前,我尝试了所有解决方案,但我无法解决我的问题。任何人都可以帮我找到解决方案吗?

我试图从“电子邮件”表中获取数据,但每次调用此异常

  

java.sql.SQLException:ResultSet为TYPE_FORWARD_ONLY at   org.sqlite.jdbc4.JDBC4ResultSet.first(JDBC4ResultSet.java:402)at at   HMDao.EmailDao.FindString(EmailDao.java:144)at   hmproject.StartingController.initialize(StartingController.java:103)     在javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)at   javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)at at   javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)at at   hmproject.HMProject.start(HMProject.java:34)at   com.sun.javafx.application.LauncherImpl.lambda $ launchApplication1 $ 163(LauncherImpl.java:863)     在   com.sun.javafx.application.PlatformImpl.lambda $ runAndWait $ 176(PlatformImpl.java:326)     在   com.sun.javafx.application.PlatformImpl.lambda为$ null $ 174(PlatformImpl.java:295)     在java.security.AccessController.doPrivileged(Native Method)at   com.sun.javafx.application.PlatformImpl.lambda $ runLater $ 175(PlatformImpl.java:294)     在   com.sun.glass.ui.InvokeLaterDispatcher $ Future.run(InvokeLaterDispatcher.java:95)     at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)at   com.sun.glass.ui.win.WinApplication.lambda $ $空149(WinApplication.java:191)

这是我的代码:

 public Email FindString(String ID) {

        Email email = null;

        String querySelectEmployer = "SElECT Email,Password FROM Email";

        try {

            ResultSet resultSet = Dbaconnection.getConnection().createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY).executeQuery(querySelectEmployer);


            if (resultSet.first()) {

                email = new Email(resultSet.getString("Email"), resultSet.getString("Password"));
            }
            resultSet.close();

        } catch (SQLException ex) {
            ex.printStackTrace();
        }

        return email;

    }

1 个答案:

答案 0 :(得分:3)

这是因为first()指的是绝对位置"在数据集中,仅适用于游标结果集。

由于您不需要重新定位,只需将光标移动到初始记录,将first()的调用替换为next()即可:

if (resultSet.next()) {
    email = new Email(resultSet.getString("Email"), resultSet.getString("Password"));
}