问题描述
我正在编写一个应用程序,用户可以在其中连接到 MySQL 数据库并执行一些查询。
我将结果放在 ResultSet 中,但找不到将结果打印到 textArea 的优雅方法。
java 是否有专门用于打印查询结果的类?
1楼
将表映射到类和结果查询。 例如,您的数据库中有一个用户表,您想要获取所有这些用户并将它们打印在 JTextArea 上。
public class User {
private Long id;
private String firstName;
private String lastName;
private String email;
// constructors, getters and setters
@Override
public String toString() {
return "ID: " + id +
"\nFirst name: " + firstName +
"\nLast name: " + lastName +
"\nEmail: " + email;
}
}
在你的 DAO 中:
public List<User> getAllUsers() {
List<User> users = new ArrayList<>();
try(Connection con = ConnectionHelper.get();
Statement st = con.createStatement()) {
String query = "SELECT * FROM User";
ResultSet rs = st.executeQuery(query);
// check if resultset is empty
if(!rs.isBerforeFirst()) {
throw new RuntimeException("Not users found");
}
// iterate over result set and wrap
// data in User bean
while(rs.next()) {
User user = new User();
user.setId(rs.getInt("id"));
user.setFirstName(rs.getString("firstname"));
user.setLastname(rs.getString("lastname"));
user.setEmail(rs.getString("email"));
users.add(user);
}
} catch(SQLException e) {
throw new RuntimeException("Error when fetch users", e);
}
return users;
}
在您的控制器或视图中:
try {
UserDao dao = new UserDao();
List<User> allUsers = dao.getAllUsers();
for(User user : allUsers) {
textArea.append(user); // implicit call toString
}
} catch(RuntimeException e) {
// log 'Not users found' or 'Error when fetch users'
Logger.getLogger(getClass().getName())
.log(Level.SEVERE. e.getMessage());
e.printStackTrace();
}