无法在 Java 中打印来自 SQL 的信息
Can't print information from SQL in Java
用户必须从显示的 table 中选择度假村 ID 并进行预订。我似乎找不到我的问题,我想打印他们正在预订的度假村的名称。
String x = jTextFieldID.getText();
Integer Resort = Integer.valueOf(x);
int resort = Integer.parseInt(x);
String sql = "SELECT RESORT_NAME FROM LouwDataBase.Resorts WHERE ID = "+Resort;
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setInt(1, resort);
try (ResultSet rs = pstmt.executeQuery()) {
if (rs.next()) {
String resortName = rs.getString("RESORT_NAME");
JOptionPane.showMessageDialog(null,
"You want to book at " + resortName);
}
你必须使用 rs.next()
:
ResultSet rs = pstmt.executeQuery(sql);
String resortName = "";
if(rs.next()){//<<-----------------------------
resortName = rs.getString("RESORT_NAME");
}
JOptionPane.showMessageDialog(null, "You want to book at "+resortName);
如果您想获得更多结果,可以使用 while(rs.next){...}
。
注意了吗?作为一个好的做法,不要在变量名称的开头使用大写字母 ResortName
改用 resortName
您需要先测试 ResultSet
结果,然后再尝试读取它:
if(rs.next()) {
String ResortName = rs.getString(1);
JOptionPane.showMessageDialog(null, "You want to book at "+ResortName);
}
并且您可以使用 getString(1)
获取 RESORT_NAME
,查看 ResultSet .getString(int index) method 了解更多详情。
错误是 sql
也传递给了 Statement.executeQuery(String)
,而不是 PreparedStatement.executeQuery()
。
int resort = Integer.parseInt(x);
//String sql = "SELECT RESORT_NAME FROM LouwDataBase.Resorts WHERE ID = ?";
String sql = "SELECT RESORT_NAME FROM LouwDataBase.Resorts WHERE ID = " + resort;
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
//pstmt.setInt(1, resort);
try (ResultSet rs = pstmt.executeQuery()) {
if (rs.next()) {
String resortName = rs.getString("RESORT_NAME");
JOptionPane.showMessageDialog(null,
"You want to book at " + resortName);
}
}
} catch (SQLException ex) {
Logger.getLogger(Booking.class.getName()).log(Level.SEVERE, null, ex);
}
Commented 是预准备语句的另一种用法(通常使用)。
您还应该关闭语句和结果集,这可以通过上面的 try-with-resources 自动完成。
哦,监督的差不多了,那个rs.next()
一定要叫。(其他的已经说了。)
用户必须从显示的 table 中选择度假村 ID 并进行预订。我似乎找不到我的问题,我想打印他们正在预订的度假村的名称。
String x = jTextFieldID.getText();
Integer Resort = Integer.valueOf(x);
int resort = Integer.parseInt(x);
String sql = "SELECT RESORT_NAME FROM LouwDataBase.Resorts WHERE ID = "+Resort;
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setInt(1, resort);
try (ResultSet rs = pstmt.executeQuery()) {
if (rs.next()) {
String resortName = rs.getString("RESORT_NAME");
JOptionPane.showMessageDialog(null,
"You want to book at " + resortName);
}
你必须使用 rs.next()
:
ResultSet rs = pstmt.executeQuery(sql);
String resortName = "";
if(rs.next()){//<<-----------------------------
resortName = rs.getString("RESORT_NAME");
}
JOptionPane.showMessageDialog(null, "You want to book at "+resortName);
如果您想获得更多结果,可以使用 while(rs.next){...}
。
注意了吗?作为一个好的做法,不要在变量名称的开头使用大写字母 ResortName
改用 resortName
您需要先测试 ResultSet
结果,然后再尝试读取它:
if(rs.next()) {
String ResortName = rs.getString(1);
JOptionPane.showMessageDialog(null, "You want to book at "+ResortName);
}
并且您可以使用 getString(1)
获取 RESORT_NAME
,查看 ResultSet .getString(int index) method 了解更多详情。
错误是 sql
也传递给了 Statement.executeQuery(String)
,而不是 PreparedStatement.executeQuery()
。
int resort = Integer.parseInt(x);
//String sql = "SELECT RESORT_NAME FROM LouwDataBase.Resorts WHERE ID = ?";
String sql = "SELECT RESORT_NAME FROM LouwDataBase.Resorts WHERE ID = " + resort;
try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
//pstmt.setInt(1, resort);
try (ResultSet rs = pstmt.executeQuery()) {
if (rs.next()) {
String resortName = rs.getString("RESORT_NAME");
JOptionPane.showMessageDialog(null,
"You want to book at " + resortName);
}
}
} catch (SQLException ex) {
Logger.getLogger(Booking.class.getName()).log(Level.SEVERE, null, ex);
}
Commented 是预准备语句的另一种用法(通常使用)。
您还应该关闭语句和结果集,这可以通过上面的 try-with-resources 自动完成。
哦,监督的差不多了,那个rs.next()
一定要叫。(其他的已经说了。)