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

2024-04-07

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

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

现在进入我的代码,当用户单击按钮时,会调用一个随机方法,该方法将当前名为“i”的 int 变量设置为特定数字(即项目的 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();
        }
}

我知道事实上它需要工作,但我正在尽力解释我的问题。有人有什么想法吗?

附:如果这个问题的格式不太正确或不恰当,我也深表歉意,您能给我一些提示或技巧来提高我在这个网站上提问的能力吗?我想尽可能地留下来!


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 ... 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 通过字符串操作预防 PHP SQL 注入[重复]

    这个问题在这里已经有答案了 可能的重复 PHP 中防止 SQL 注入的最佳方法 https stackoverflow com questions 60174 best way to prevent sql injection in php
  • TSQL:无法对 COUNT(*) 执行聚合函数 AVG 来查找一天中最繁忙的时间

    考虑一个保存日志数据的 SQL Server 表 重要的部分是 CREATE TABLE dbo CustomerLog ID int IDENTITY 1 1 NOT NULL CustID int NOT NULL VisitDate
  • 级联删除时触发调用

    我在 MySQL 中有表 A 它有一些对其他表 B C D 的级联删除的引用 当从 A 中删除某些内容时 我需要使用触发器 当我直接从 A 删除记录时 此触发器起作用 但它不适用于级联删除 是否存在任何版本的 MySQL 可以让我的触发器与
  • Symfony/Doctrine 重新排列数据库列

    当我使用doctrine schema update命令行生成表时 Doctrine 或Symfony 似乎想要添加一个命令来重新排列我的列 将键放在它出现的前面 我想知道是否 更希望在哪里 我可以禁用环境的这个 功能 所以当我去生成我的表
  • 法语和西班牙语的特殊字符可以保存在 varchar 中吗?

    法语和西班牙语中有普通英语中不使用的特殊字符 重音元音等 varchar 是否支持这些字符 或者我需要一个 nvarchar 吗 注 我愿意NOT希望讨论我是否应该使用 nvarchar 还是 varchar 您在谈论什么 SQL 实现 我
  • 如何在oracle中获取表作为输出参数

    我正在尝试将 Oracle 过程调用的 out 参数强制转换为对象 它不起作用 因为 据我了解 我需要定义一个映射 它告诉方法如何转换它 如果地图为空或未正确填充 则它默认为 STRUCT 类型的对象 在我的情况下这是错误的 我已经构建了一
  • oracle lag 函数与 group by

    我有一个查询忽略从前一个值增加的值 例如 采用下表 col1 col2 col3 5 1 A 4 2 A 6 3 A 9 4 B 8 5 B 10 6 B 现在进行以下查询 select col1 from select col1 lag
  • SQL查询获取最后两条记录的DateDiff

    我有一个名为 Event 的表 其中 eventNum 作为主键 日期作为 SQL Server 2008 R2 中的 datetime2 7 我试图获取表中最后两行的日期并以分钟为单位获取差异 这就是我目前所拥有的 Select DATE
  • 在bigquery中比较两个表的有效方法

    我有兴趣比较两个表是否包含相同的数据 我可以这样做 standardSQL SELECT key1 key2 FROM SELECT table1 key1 table1 key2 table1 column1 table2 column1
  • 了解涉及 3 个或更多表时 JOIN 的工作原理。 [SQL]

    我想知道是否有人可以帮助我提高对 SQL 中 JOIN 的理解 如果它对问题很重要 我会特别考虑 MS SQL Server 取 3 个表 A B A 通过某些 A AId 与 B 相关 和 C B 通过某些 B BId 与 C 相关 如果
  • Mysql关于重复键更新+子查询

    使用这个问题的答案 需要 MySQL INSERT SELECT 查询具有数百万条记录的表 https stackoverflow com questions 662877 need mysql insert select query fo
  • 重用 PDO 语句 var 会使进程崩溃

    我重用一个变量来存储两个不同的 PDO mysql 语句 stmt dbh gt prepare SELECT stmt gt execute stmt dbh gt prepare UPDATE crash here Error in o
  • 如何显示 RSpec 测试生成的 SQL 查询日志?

    我正在为我的 Rails 3 应用程序编写规范 我想测试数据库事务是否真的有效 如果能够看到我的应用程序在规范驱动下生成的 sql 查询 这将非常有帮助 有没有办法像在 Rails 控制台中一样查看查询 我正在使用 Rails 3 0 9
  • 尚未为此带有 SQL Server 的 DbContext .NET Core 配置数据库提供程序

    我一直用这个把头撞在墙上 并且一直在谷歌上搜索无济于事 我刚刚开始一个新的 ASP NET Core MVC 项目 我已将这两个包安装 更新为 2 2 0 Microsoft EntityFrameworkCore SqlServer Mi
  • 关于 Cassandra 与 MySQL 的一些建议

    几天前我在这里问了一个问题 得到了一些非常好的答案 我正在考虑做一个带有个人资料 个人简介等的facebook风格的网站 并询问我是否应该使用mysql 答案是使用Cassandra 因为好多了 我只是问这是每个人都会建议的 只是我对mys
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 在数据库中存储类型时的最大 MIMEType 长度

    人们在数据库中使用什么作为 MIMEType 字段的长度 到目前为止我们看到的最长的是 72 字节 application vnd openxmlformats officedocument wordprocessingml documen
  • 当php脚本通过ajax运行时显示进度条

    我有一个通过 ajax 向服务器提交值的表单
  • 导入到 SQL Server 时忽略 Excel 文件中的列

    我有多个具有相同格式的 Excel 文件 我需要将它们导入 SQL Server 我当前遇到的问题是 有两个文本列我需要完全忽略 因为它们是自由文本 并且某些行的字符长度超出了服务器允许我导入的长度 这会导致截断错误 因为我的分析不需要这些
  • Yii2:无法将列值更新+1

    创建新记录时 我需要将列值更新 1 public function actionCreate model new CreateBookings if model gt load Yii app gt request gt post Yii

随机推荐

  • 处理过期的VOIP推送

    所以我有 VOIP 呼叫应用程序 一切正常 一个用户可以呼叫其他用户并且可以通话 但我面临的问题是我不明白如何解决这个问题 问题 当user1呼叫user2时 user1向user2发送voip推送请求 但是当收到推送通知时 user2 处
  • Firebase 托管未验证 GoDaddy 中的 TXT 记录

    我部署了我的应用程序 现在我正在尝试添加我的自定义 URL 我按照 Firebase 的说明将他们的 TXT 记录添加到我的 DNS GoDaddy 中 但现在 Firebase 表示尚未得到验证 我认为我做错了什么 但这里没有什么可搞乱的
  • QVBoxLayout:如何使用 Qt 设计器将小部件对齐到顶部

    我仅将 qt 设计器用于 ui 布局 这与这个问题几乎是同一个问题 QVBoxLayout 如何将小部件垂直对齐到顶部而不是中心 https stackoverflow com questions 10082299 qvboxlayout
  • Php:查找 Chrome 和 Safari 浏览器

    我使用下面的代码来查找用户代理 user agent SERVER HTTP USER AGENT if preg match MSIE i user agent echo Internet Explorer if preg match F
  • 安装分析后,我的 Worklight 6.2 控制台上没有运行时

    我刚刚安装了Worklight 6 2服务器 使用配置工具部署了一个简单的项目 并且运行正常 然后我按照知识中心的说明安装分析 之后 当我在浏览器中打开 WL 控制台时 我收到 找不到运行时 分析似乎运行良好 我的 war 文件位于 Lib
  • 如何在teamcity中运行e2e测试,如何在后台运行服务器并运行e2e

    如何在 teamcity 构建步骤中运行我需要的服务器以及 e2e 测试 我对我的 Angular 2 应用程序进行了 Protractor e2e 测试 我有一个有趣的 Angular cli 和 gulp 组合 但请耐心等待 这是我在本
  • 使用 SUBSTR Oracle SQL 将 SPACE 添加到 CONCAT

    我试图将两列连接在一起 并用空格分隔 第一列需要 SUBSTR 另一列则不需要 我写了这个查询 SELECT CONCAT SUBSTR FIRST NAME 1 1 LAST NAME AS NAME FROM OEHR EMPLOYEE
  • 在caffe prototxt 文件中。 TRAIN 和 TEST 阶段做什么?

    我是咖啡新手 感谢你们 in https github com BVLC caffe blob master src caffe proto caffe proto https github com BVLC caffe blob mast
  • 为什么在 PHP 中使用 FPDF 时亚洲 unicode 字符没有出现在 PDF 上?

    我在用FPDF http www fpdf org 创建 PDF 并tFPDF http www fpdf org en script script92 php允许使用 unicode 字符 例如中文 日文或韩文 我正在使用 tFPDF 示
  • 如何测试角度事件?

    我需要测试事件是否正确发出或广播 并手动触发事件 最好的方法是什么 如果您只需要对事件触发和捕获进行一些测试 我就是这样做的 为了确保某个事件被触发 emit ed or broadcast ed 间谍是正确的选择 您需要对将调用的范围的引
  • ICommand MVVM 实现

    因此 在我正在执行的这个特定 MVVM 实现中 我需要几个命令 我真的厌倦了逐个实现 ICommand 类 因此我想出了一个解决方案 但我不知道它有多好 因此我们将非常感谢这里任何 WPF 专家的意见 如果您能提供更好的解决方案 那就更好了
  • 电子预警系统。如何在没有初始同步的情况下获取最新的SyncState?

    假设我的文件夹中有 100 000 条消息 我希望能够与最新更改同步 但我不需要任何旧消息 请求初始同步 SyncFolderItems null syncState 会带回所有 100 000 条消息 我不需要 如何在不从服务器读取 10
  • 如何获取一个月中的工作日列表?

    在另一个问题中 https stackoverflow com questions 3849975 how to get all dates in a given month in c它展示了如何获取一个月中的所有天数 我需要同样的东西 但
  • JMS 有哪些替代方案? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • PipedInputStream - 如何避免“java.io.IOException:管道损坏”

    我有两个线程 其中一个写入 PipedOutputStream 另一个从相应的 PipedInputStream 读取 背景是一个线程正在从远程服务器下载一些数据 并通过管道流将其复用到多个其他线程 问题是有时 尤其是下载大文件时 gt 5
  • 路由应用程序覆盖文件[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我最近将我的游戏提交到了 App Store 它最近已获得批准 正在 App Store 处理 当我单击我的应用程序时 它显示 路由应用程序覆盖文件
  • GWT-出口商。工作示例

    我有一个 Java 库 我需要将其转换为 JS 我找到了解决方案GWT 创建实用的 javascript 库 https stackoverflow com questions 3125556 gwt to create utility j
  • 打开第二个 fancybox 在另一个 fancybox 中!

    嘿 我的花式盒子遇到了麻烦 我正在一个 fancybox 中启动一个表单 一般是通过fancybox以iframe方式打开 因为它是作为其他域的小部件启动的 在此 iframe 中 我打开第二个 fancybox 来显示验证错误 所有这一切
  • 展开方案中的函数

    Goal 实施unfold仅使用两个参数的函数 论据 第一个参数是 f 它接受某种类型 I 的初始值并返回 nil 或两个元素的 cons 对 这两个元素中的第一个是某种类型 A 的列表中的下一个元素 下一个初始值又是某些类型 I 第二个参
  • 我如何编写一个 SQL 查询来检查列是否为零,它将更新它,如果不是,它将移动到下一列?

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