如何编写一个SQL查询来检查列是否为零,它将更新它,如果不是,它将移动到下一列?

时间:2017-03-05 01:12:22

标签: mysql sql sql-server database

详细说明,我目前正在构建一个让人们创建帐户并登录的应用程序。他们提供的信息保存在我的数据库中。我的数据库只包含一个保存用户信息的表。每行是一个用户。这是一张图片,可以让您更好地了解:

Image of my database

前六列由用户信息组成。但是,在我的应用程序中,用户有一个包含四十个插槽的库存,这就是数据库中的额外列。当其中一个槽列中的节点等于零时,表示库存槽为空。但是,如果它是任何数字但是零意味着它在该槽中有一个特定项目。

现在为了获取我的代码,当用户单击一个按钮时,会调用一个随机方法来设置一个int变量,该变量当前名为" i"到特定数字,即项目的ID。此时,系统会提示用户提供两个按钮,询问他们是否要保留该项目。如果他们决定保留该项目,我需要将其添加到数据库中的库存中。这是我的问题发挥作用的地方。我的应用程序知道哪个用户已登录,因为当有人正确登录时,会设置他们的用户名,这是应用程序其余部分可以使用的字符串变量的主键。所以它知道要更新哪一行但是我需要它按顺序检查每一列,如果它在节点中找到一个零的列,它会将它更新为变量" i"目前是。

这是我目前的代码,我对SQL很陌生,但我试图自学,如果这会冒犯你,我会道歉(因为它太糟糕了):

    try{
        //get connection to database
        Connection con = DataBaseConnect.getConnection();
        //create a statement
        PreparedStatement updateInv = con.prepareStatement("UPDATE userinfo "
                + "SET InvSlot1 = CASE WHEN InvSlot1 = 0 THEN SET InvSlot1 = "+i+" ELSE InvSlot1 END "
                + "InvSlot2 = CASE WHEN InvSlot2 = 0 THEN SET InvSlot2 = "+i+" ELSE InvSlot2 END "
                + "InvSlot3 = CASE WHEN InvSlot3 = 0 THEN SET InvSlot3 = "+i+" ELSE InvSlot3 END "
                + "InvSlot4 = CASE WHEN InvSlot4 = 0 THEN SET InvSlot4 = "+i+" ELSE InvSlot4 END "
                + "InvSlot5 = CASE WHEN InvSlot5 = 0 THEN SET InvSlot5 = "+i+" ELSE InvSlot5 END "
                + "InvSlot6 = CASE WHEN InvSlot6 = 0 THEN SET InvSlot6 = "+i+" ELSE InvSlot6 END "
                + "InvSlot7 = CASE WHEN InvSlot7 = 0 THEN SET InvSlot7 = "+i+" ELSE InvSlot7 END "
                + "InvSlot8 = CASE WHEN InvSlot8 = 0 THEN SET InvSlot8 = "+i+" ELSE InvSlot8 END "
                + "InvSlot9 = CASE WHEN InvSlot9 = 0 THEN SET InvSlot9 = "+i+" ELSE InvSlot9 END "
                + "InvSlot10 = CASE WHEN InvSlot10 = 0 THEN SET InvSlot10 = "+i+" ELSE InvSlot10 END "
                + "InvSlot11 = CASE WHEN InvSlot11 = 0 THEN SET InvSlot11 = "+i+" ELSE InvSlot11 END "
                + "InvSlot12 = CASE WHEN InvSlot12 = 0 THEN SET InvSlot12 = "+i+" ELSE InvSlot12 END "
                + "InvSlot13 = CASE WHEN InvSlot13 = 0 THEN SET InvSlot13 = "+i+" ELSE InvSlot13 END "
                + "InvSlot14 = CASE WHEN InvSlot14 = 0 THEN SET InvSlot14 = "+i+" ELSE InvSlot14 END "
                + "InvSlot15 = CASE WHEN InvSlot15 = 0 THEN SET InvSlot15 = "+i+" ELSE InvSlot15 END "
                + "InvSlot16 = CASE WHEN InvSlot16 = 0 THEN SET InvSlot16 = "+i+" ELSE InvSlot16 END "
                + "InvSlot17 = CASE WHEN InvSlot17 = 0 THEN SET InvSlot17 = "+i+" ELSE InvSlot17 END "
                + "InvSlot18 = CASE WHEN InvSlot18 = 0 THEN SET InvSlot18 = "+i+" ELSE InvSlot18 END "
                + "InvSlot19 = CASE WHEN InvSlot19 = 0 THEN SET InvSlot19 = "+i+" ELSE InvSlot19 END "
                + "InvSlot20 = CASE WHEN InvSlot20 = 0 THEN SET InvSlot20 = "+i+" ELSE InvSlot20 END "
                + "InvSlot21 = CASE WHEN InvSlot21 = 0 THEN SET InvSlot21 = "+i+" ELSE InvSlot21 END "
                + "InvSlot22 = CASE WHEN InvSlot22 = 0 THEN SET InvSlot22 = "+i+" ELSE InvSlot22 END "
                + "InvSlot23 = CASE WHEN InvSlot23 = 0 THEN SET InvSlot23 = "+i+" ELSE InvSlot23 END "
                + "InvSlot24 = CASE WHEN InvSlot24 = 0 THEN SET InvSlot24 = "+i+" ELSE InvSlot24 END "
                + "InvSlot25 = CASE WHEN InvSlot25 = 0 THEN SET InvSlot25 = "+i+" ELSE InvSlot25 END "
                + "InvSlot26 = CASE WHEN InvSlot26 = 0 THEN SET InvSlot26 = "+i+" ELSE InvSlot26 END "
                + "InvSlot27 = CASE WHEN InvSlot27 = 0 THEN SET InvSlot27 = "+i+" ELSE InvSlot27 END "
                + "InvSlot28 = CASE WHEN InvSlot28 = 0 THEN SET InvSlot28 = "+i+" ELSE InvSlot28 END "
                + "InvSlot29 = CASE WHEN InvSlot29 = 0 THEN SET InvSlot29 = "+i+" ELSE InvSlot29 END "
                + "InvSlot30 = CASE WHEN InvSlot30 = 0 THEN SET InvSlot30 = "+i+" ELSE InvSlot30 END "
                + "InvSlot31 = CASE WHEN InvSlot31 = 0 THEN SET InvSlot31 = "+i+" ELSE InvSlot31 END "
                + "InvSlot32 = CASE WHEN InvSlot32 = 0 THEN SET InvSlot32 = "+i+" ELSE InvSlot31 END " 
                + "InvSlot33 = CASE WHEN InvSlot33 = 0 THEN SET InvSlot33 = "+i+" ELSE InvSlot33 END "
                + "InvSlot34 = CASE WHEN InvSlot34 = 0 THEN SET InvSlot34 = "+i+" ELSE InvSlot34 END "
                + "InvSlot35 = CASE WHEN InvSlot35 = 0 THEN SET InvSlot35 = "+i+" ELSE InvSlot35 END "
                + "InvSlot36 = CASE WHEN InvSlot36 = 0 THEN SET InvSlot36 = "+i+" ELSE InvSlot36 END "
                + "InvSlot37 = CASE WHEN InvSlot37 = 0 THEN SET InvSlot37 = "+i+" ELSE InvSlot37 END "
                + "InvSlot38 = CASE WHEN InvSlot38 = 0 THEN SET InvSlot38 = "+i+" ELSE InvSlot38 END "
                + "InvSlot39 = CASE WHEN InvSlot39 = 0 THEN SET InvSlot39 = "+i+" ELSE InvSlot39 END "
                + "InvSlot40 = CASE WHEN InvSlot40 = 0 THEN SET InvSlot40 = "+i+" ELSE InvSlot40 END "
                + "WHERE userinfo.Username = '"+LoginController.userLog+"'");
        //process result set
        updateInv.executeUpdate();
        }
    catch(Exception e){
        e.printStackTrace();
        }
}

我知道它需要工作,但我会尽力解释我的问题。有没有人有任何想法?

P.S。如果这个问题的格式不是正确或正确的话,我也很抱歉,你能给我一些提示或技巧来改进我的问题,询问这个网站的能力吗?我想尽可能坚持下去!

1 个答案:

答案 0 :(得分:0)

update users
    set InvSlot1 = CASE WHEN InvSlot1 = 0 THEN _something_ ELSE InvSlot1 END,
        InvSlot2 = CASE WHEN InvSlot2 = 0 THEN _something else_ ELSE InvSlot2 END,
        ..... the rest of InvSlots ....
    WHERE ... your condition what users to update ...