麻烦准备好的声明

时间:2014-03-05 20:21:11

标签: java mysql jdbc prepared-statement

基本上我遇到下面的方法有问题 - 比如图像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;
}

2 个答案:

答案 0 :(得分:0)

每次运行时,您是不是只更新了一张图片?你还有if语句覆盖你所有的sql语句。 因此,当获得第一张图片时,第二张第三张图片和第四张图片返回null,但您的程序永远不会超过第二张图片。 没有什么可以让它更新所有4张图片,一个电话,其他这种方法。你必须调用它4次才能得到每张照片,假设你的sql有所有图片。 PS可能会改变一段时间而不是if else树。

编辑:CANT评论: 是的,但它只有1张图片。如果它们都是null,那么它只更新第一张图片。这可以解释为什么第二张图片对你来说总是空的。

答案 1 :(得分:0)

我的索引不在了

第一个位置是主键,不是图像/ blob