使用 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()
工作。
未
COMMIT
ted 的数据仅在创建它的会话中可见(如果尚未ROLLBACK
ted,则在会话结束时将COMMIT
)。如果您看不到另一个会话中的数据(即在 Java 中),请确保您已在您 COMMIT
编辑数据的 SQL 客户端(即 SQL*Plus)中发出 INSERT
命令。
注意:即使您以同一用户身份连接,这也会创建一个单独的会话,您将无法看到其他会话中未提交的数据。
COMMIT
文档:
直到您提交交易:
- 通过查询修改的表,您可以看到您在事务过程中所做的任何更改,但其他用户无法看到这些更改。提交事务后,更改对于提交后执行的其他用户的语句是可见的。
- 您可以使用
语句回滚(撤消)事务期间所做的任何更改(请参阅ROLLBACK
)。ROLLBACK
我在查询末尾看到一个空格,这可能是个问题吗?
字符串sql =“从成员中选择*”;