繁体   English   中英

无法从Java中的SQL打印信息

[英]Can't print information from SQL in Java

用户必须从显示的表格中选择一个度假胜地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)方法以获取更多详细信息。

错误是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);
}

注释是准备好的语句的替代用法(通常使用)。

您还应该关闭语句和结果集,可以使用上述try-with-resources自动完成。

哦,几乎可以理解,必须调用rs.next() (其他人已经提到过。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM