我正在尝试在一些txt中设置信息。当所有列都已满时,我的代码很好,但是当一列为null时,会抛出异常,并且代码不会在try catch中运行。

我知道问题是空列,因为列PhotoQ是用户的可选数据信息。因此,一种解决方案可能是在所有用户帐户中加载defaultPhoto,但将花费存储在数据库中。

对不起,我是新XD。

示例代码:

try {
    PreparedStatement pstm = conn.prepareStatement(query);
    pstm.setInt(1, userid);
    pstm.setInt(2, quizzid);
    pstm.setInt(3, NumQuest);
    ResultSet rs =pstm.executeQuery();

    while (rs.next()) {
        fileBytes = rs.getBytes("PhotoQ");
        ImageIcon image = new ImageIcon(fileBytes);
        Image im = image.getImage();
        Image myImg = im.getScaledInstance(lblImage.getWidth(), lblImage.getHeight(), Image.SCALE_SMOOTH);
        ImageIcon newImage = new ImageIcon(myImg);

        if (rs.getString("Optionsid").endsWith("1")) {
            txtaA.setText(rs.getString("Options"));
            txtaQuestion.setText(rs.getString("Question"));
            if (rs.getInt("Valid")==1) {
                ckbA.setSelected(true);
            }
            else {
                ckbA.setSelected(false);
            }
        }
    }
}

最佳答案

您的问题和错误似乎集中在null和/或PhotoQ列的Optionsid值上。您应该对每列使用显式检查是否为空。仅当列不是null时,才应尝试使用该值。

遵循这些思路,应该可以使您了解如何处理此问题:

while (rs.next()) {
    fileBytes = rs.getBytes("PhotoQ");
    if (fileBytes != null) {
        ImageIcon image = new ImageIcon(fileBytes);
        Image im = image.getImage();
        Image myImg = im.getScaledInstance(lblImage.getWidth(), lblImage.getHeight(), Image.SCALE_SMOOTH);
        ImageIcon newImage = new ImageIcon(myImg);
    }

    String optionsId = rs.getString("Optionsid");
    if (optionsId != null && optionsId.endsWith("1")) {
        txtaA.setText(rs.getString("Options"));
        txtaQuestion.setText(rs.getString("Question"));
        Integer valid = rs.getInt("Valid");
        if (valid != null && valid.intValue() == 1) {
            ckbA.setSelected(true);
        } else {
            ckbA.setSelected(false);
        }
    }
}

10-01 19:17
查看更多