我想使用多个标签在数据库表中显示信息。
每个人的这些信息都是唯一的,并且与表中的每一行都相关。
登录程序后,每个人都应该能够看到自己的信息,并通过登录个人资料页面进行更正。
对于表中的每一列,我都提供了一个标签,它根据该列显示每个人的信息。
我写了以下代码来在标签上显示数据库数据,但当我运行它时,什么都不显示!
我也不知道是使用ResultSet及其方法,还是使用Statement及其方法来获取要在Label中使用的字符串。
在此处输入代码
private void displayProfileDetails(String resultSetQuery, Label label) {
DatabaseConnection connectToDrugDatabase = new DatabaseConnection();
try (
Connection connectionDB = connectToDrugDatabase.getConnection();
Statement statement = connectionDB.createStatement();
ResultSet resultSet = statement.executeQuery(resultSetQuery);) {
while (resultSet.next()) {
label Text
if (resultSet.next()) {
baseMessageLabel
Platform.runLater(() -> {
label.setText(resultSet.toString());
}
);
} else {
label.setText("null");
}
}
} catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
}
}
private void profileDetails() {
String firstNameDisplayQuery = "SELECT * FROM APP.users WHERE USERNAME = '" + userID + "'";
String lastNameDisplayQuery = "SELECT * FROM APP.users WHERE FIRSTNAME = '" + userID + "'";
String userNameDisplayQuery = "SELECT * FROM APP.users WHERE LASTNAME = '" + userID + "'";
String passwordDisplayQuery = "SELECT * FROM APP.users WHERE PASSWORD = '" + userID + "'";
String EmailDisplayQuery = "SELECT * FROM APP.users WHERE PHONENUMBER = '" + userID + "'";
String AddressDisplayQuery = "SELECT * FROM APP.users WHERE ADDRESS = '" + userID + "'";
String phoneNumberDisplayQuery = "SELECT * FROM APP.users WHERE JOB = '" + userID + "'";
String jobDisplayQuery = "SELECT * FROM APP.users WHERE EMAIL = '" + userID + "'";
displayProfileDetails(firstNameDisplayQuery, firstNameLabel);
displayProfileDetails(lastNameDisplayQuery, lastNameLabel);
displayProfileDetails(userNameDisplayQuery, userNameLabel);
displayProfileDetails(EmailDisplayQuery, emailLabel);
displayProfileDetails(AddressDisplayQuery, addressLabel);
displayProfileDetails(phoneNumberDisplayQuery, phoneNumberLabel);
displayProfileDetails(jobDisplayQuery, JobLabel);
displayProfileDetails(passwordDisplayQuery, passwordLabel);
}
当您调用resultSet.next((时,您将光标向前移动。然后在if语句中再次调用resultSet.next((,并在没有从第一条记录中获取值的情况下再次向前移动;
删除if语句,因为如果while循环正在运行,则光标处已经存在有效记录。
此外,resultSet.toString((不会用您的数据填充字段。您需要使用rs.getString(index(;其中index是刚得到的列的列索引(从1开始(。
这里有一个你可以做什么的例子。
// this method returns all columns of a row in ordinal() order. If username is the first column of your table then object[0] will contain a String with that data. etc.
private Object[] getUserDataByUserName(Connection conn, String username) throws SQLException {
try (PreparedStatement ps = conn.prepareStatement("select * from APP.USER where username = ?")) {
ps.setString(1, username);
try (ResultSet results = ps.executeQuery()) {
if (results.next()) {
Object[] row = new Object[results.getMetaData().getColumnCount()];
for (int i = 0; i < row.length; i++) {
// arrays start at pos 0, but result sets start at column 1
row[i] = results.getObject(i + 1);
}
return row;
}
}
return null;
}
}