为什么 'ResultSet.next()' 返回 false?

问题描述 投票:0回答:2

使用 Windows 11、OracleDB、IntelliJ、Lombok、Java

我想知道为什么

rs.next()
在下面的代码中返回
false
并且
while()
语句不运行。

//MemberDAO.java
import java.sql.*;
import java.util.*;

public class MemberDAO {
    private Connection connection;
    private String dbusername = "myuser";
    private String dbpassword = "1234";

    public List<MemberDTO> listMembers() {
        List<MemberDTO> members = new ArrayList<MemberDTO>();

        try {
            connectDB();

            String sql = "SELECT * FROM member ";
            System.out.println("query: " + sql);

            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            ResultSet rs = preparedStatement.executeQuery();

            while(rs.next()) {    //In here re.next() return false
                System.out.println("rs running");
                String id = rs.getString("id");
                String password = rs.getString("password");
                String name = rs.getString("name");
                String email = rs.getString("email");
                Date joinDate = rs.getDate("joinDate");

                MemberDTO memberDTO = new MemberDTO();
                memberDTO.setId(id);
                memberDTO.setPassword(password);
                memberDTO.setName(name);
                memberDTO.setEmail(email);
                memberDTO.setJoinDate(joinDate);
                members.add(memberDTO);
            }

            rs.close();
            preparedStatement.close();
            connection.close();
        }
        catch (SQLException e) {
            e.printStackTrace();
        }

        return members;
    }

    private void connectDB() {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            connection = DriverManager.getConnection(
                    "jdbc:oracle:thin:@localhost:1521/xe",
                    dbusername,
                    dbpassword
            );
            System.out.println("Connected to database");
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}
//MemberDTO.java
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.sql.Date;

@NoArgsConstructor
@Getter
@Setter
public class MemberDTO {
    private String id;
    private String name;
    private String password;
    private String email;
    private Date joinDate;
}

Oracle DB 中存在两条记录。在此处输入图像描述

但是

rs.next()
返回
false
并且
while()
不运行。 在此输入图片描述

我想知道为什么

rs.next()
返回 false 以及如何让
while()
工作。

java oracle resultset ojdbc
2个回答
0
投票

COMMIT
ted 的数据仅在创建它的会话中可见(如果尚未
ROLLBACK
ted,则在会话结束时将
COMMIT
)。如果您看不到另一个会话中的数据(即在 Java 中),请确保您已在您
COMMIT
编辑数据的 SQL 客户端(即 SQL*Plus)中发出
INSERT
命令。

注意:即使您以同一用户身份连接,这也会创建一个单独的会话,您将无法看到其他会话中未提交的数据。

来自

COMMIT
文档

直到您提交交易:

  • 通过查询修改的表,您可以看到您在事务过程中所做的任何更改,但其他用户无法看到这些更改。提交事务后,更改对于提交后执行的其他用户的语句是可见的。
  • 您可以使用
    ROLLBACK
    语句回滚(撤消)事务期间所做的任何更改(请参阅
    ROLLBACK
    )。

0
投票

我在查询末尾看到一个空格,这可能是个问题吗?
字符串sql =“从成员中选择*”;

© www.soinside.com 2019 - 2024. All rights reserved.