基本上我遇到下面的方法有问题 - 比如图像2为空 - 然后使用的sql语句应该是update ProfileImages set optionalImageTwo = ? where userid = ? ";
- 但是,当我检查预备语句时,我可以看到以下内容
com.mysql.jdbc.PreparedStatement@11568fb5:更新ProfileImages集 optionalImageTwo ='i·?'其中userid ='test'
我用test测试方法,abc
为什么这不能正常工作的任何想法,因为当我再次运行该方法时,图像2仍为空。
由于
public static boolean addOptionalImages(String userid, String image){
Connection conn = null;
PreparedStatement st = null;
ResultSet rs = null;
PreparedStatement prepst = null;
final String getOptionalImages = "SELECT * FROM ProfileImages WHERE userid = '" + userid + "'";
try {
conn = source.getConnection();
st = conn.prepareStatement(getOptionalImages);
//firstly grab all optional images for the user so we can see
//if the user has already uploaded this image or not
String sql = null;
Blob imageOne;
Blob imageTwo;
Blob imageThree;
Blob imageFour;
st = conn.prepareStatement(getOptionalImages);
rs = st.executeQuery(getOptionalImages);
if(rs.next()){
imageOne = rs.getBlob(1);
imageTwo = rs.getBlob(2);
imageThree = rs.getBlob(3);
imageFour= rs.getBlob(4);
//check which image to update in the db
if(imageOne == null){
sql = "update ProfileImages set optionalImageOne = ? where userid = ? ";
}else if(imageTwo == null){
sql = "update ProfileImages set optionalImageTwo = ? where userid = ? ";
}else if(imageThree == null){
sql = "update ProfileImages set optionalImageThree = ? where userid = ? ";
}else if(imageFour == null){
sql = "update ProfileImages set optionalImageFour = ? where userid = ? ";
}
}
prepst = conn.prepareStatement(sql);
BASE64Decoder decoder = new BASE64Decoder();
byte[] imageArray = decoder.decodeBuffer(image);
Blob blobValue = new SerialBlob(imageArray);
prepst.setBlob(1,blobValue);
prepst.setString(2,userid);
prepst.executeUpdate();
return true;
}catch(Exception e){
e.printStackTrace();
logger.error("Unable to add additional images for user " + userid, e);
}finally{
closeConnection(conn);
closeResultSet(rs);
closePreparedStatement(st);
closePreparedStatement(prepst);
}
return false;
}
答案 0 :(得分:0)
每次运行时,您是不是只更新了一张图片?你还有if语句覆盖你所有的sql语句。 因此,当获得第一张图片时,第二张第三张图片和第四张图片返回null,但您的程序永远不会超过第二张图片。 没有什么可以让它更新所有4张图片,一个电话,其他这种方法。你必须调用它4次才能得到每张照片,假设你的sql有所有图片。 PS可能会改变一段时间而不是if else树。
编辑:CANT评论: 是的,但它只有1张图片。如果它们都是null,那么它只更新第一张图片。这可以解释为什么第二张图片对你来说总是空的。
答案 1 :(得分:0)
我的索引不在了
第一个位置是主键,不是图像/ blob