我试图在某些txts中设置信息。当所有列都已满时,我的代码很好,但是当列为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);
}
}
}
}
答案 0 :(得分:0)
您的问题和错误似乎以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);
}
}
}
答案 1 :(得分:0)
要在我的应用中解决此问题。 我使用了一个wasnull()但是这个尝试只是为了询问一个记录是否带有一个空字段,我不知道在一个尝试中尝试是否正确但是知道是有效的!
代码:
try {
PreparedStatement pstm = conn.prepareStatement(query1);
pstm.setInt(1, userid);
pstm.setInt(2, quizzid);
pstm.setInt(3, NumQuest);
ResultSet rs =pstm.executeQuery();
try {
//move result set at first row
rs.next();
fileBytes = rs.getBytes("PhotoQ");
//ask if result set contain null field
if (rs.wasNull()) {
// this variable is defined like globlal
nuller=1;
}else {
nuller=0;
}
} catch (Exception f) {
}
//reload resulset for begin again
rs =pstm.executeQuery();
while (rs.next()) {
//here is thi – Tim Biegeleisen idea
if (nuller==0) {
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);
lblImage.setIcon(newImage);
}
//此代码仅适用于具有一行结果的查询。我用,因为我的 //老师的例子就是和。当我完成后,系统将更改代码
答案 2 :(得分:0)
@StevenCanales,
您在正确的轨道上可以使用wasNull()来检查从结果集中提取的最后一列的值。但是,您不需要额外的try / catch。你可以在while块中简化所有这些。
try {
PreparedStatement pstm = conn.prepareStatement(query1);
pstm.setInt(1, userid);
pstm.setInt(2, quizzid);
pstm.setInt(3, NumQuest);
ResultSet rs = pstm.executeQuery();
while (rs.next()) {
fileBytes = rs.getBytes("PhotoQ");
// ask if result set contain null field
if (rs.wasNull()) {
// handle as you wish... throw an exception ?
} else {
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);
}
}
}
}
} catch (Exception e) {
//handle exception
}
while循环将处理适当的结果集。移动到第一条记录或后退或前进时,您无需做任何特别的事情。
答案 3 :(得分:-1)
你必须在fileBytes上检查null。
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);
}
那么你必须用你的newImage对象做任何你想做的事。