我如何编写一个 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 查询来检查列是否为零,它将更新它,如果不是,它将移动到下一列? 的相关文章

  • 将 UPDATE 转换为 INSERT INTO ON DUPLICATE KEY UPDATE 语句

    我有这个 UPDATE MySQL 语句 效果很好 UPDATE table1 Inner Join table2 ON table2 id table1 gw id SET table1 field1 1 table1 field2 2
  • 如何从经典 ASP 读取 SQL Always-加密列

    我维护一个经典的 ASP 应用程序 是的 我知道 我们正在开发它 并且需要访问 SQL 2017 中的 Always Encrypted 列 我已经导入了证书并在 SSMS 和 PowerShell 中进行了测试 这很有效 我在 ASP 中
  • 设置 xact_abort 并尝试一起捕获

    我的 sp 中有一个 try catch 块 其中只有一条插入语句 catch 检查错误代码是否违反 pk 如果是则进行更新 但有时我得到 当前事务无法提交 并且无法支持写入日志文件的操作 回滚事务 在批处理结束时检测到不可提交的事务 事务
  • Visual Studio 2010 与 SQL Server 2012 商业智能的正确安装顺序

    我有一个 Windows 7 64 位 旗舰版 虚拟机 想要安装以下内容 Visual Studio 2010 Ultimate SQL Server 2012 Business Intelligence with SSIS and SSR
  • 如何将 MySQL 数据库更改为 UTC?

    我使用的是 Windows 7 对数据库方面的东西有点陌生 我尝试在 Google 上搜索如何将系统时区更改为 UTC 但文档有些高级 我不太确定如何更改此字段 在 my ini 文件的 mysqld 部分下 添加以下行 default t
  • 单行的总和值?

    我有一个 MySQL 查询 它返回由一系列 1 和 0 组成的单行 它用于进度条指示器 我现在在代码中对它进行求和 但我尝试对查询中的值求和 并意识到我无法使用 SUM 因为它们有很多列 但只有一行 有没有办法可以在查询中自动求和 就像这样
  • 将两行中相似的列数据合并到一行中

    我的查询结果具有以下特征 LIDCode Total Domain Region VSE Version AB02 15 GLOBAL CANLA 0 6943 AB02 5925 CENTRE STREET SW 31 GLOBAL CA
  • 如何在 Delphi DBLookupComboBox 中选择正确的项目

    我有一个数据库查找组合框连接到数据库查询 那部分工作正常 当我运行程序时数据库查找组合框填充有查询的结果 我想看看数据库查找组合框填充第一项 请选择 当 的时候程序第一次运行或者当一个新项目行动已启动 见下图 另外 如果我正在加载以前保存的
  • 如何以最少的查询次数获取帖子列表和关联标签

    我的表格结构如下 标签 更多的是一个类别 id 标签名称 描述 slug POSTS ID 标题 网址 邮戳 id idPost idTag USERS ID 用户名 userSlug VOTES id idPost idUser 每个帖子
  • 如何授予所有表的 REFERENCES 权限

    我必须授予REFERENCES登录权限说sql login 我可以给予资助REFERENCES对单个表的权限 例如 GRANT REFERENCES ON Mytable TO sql login 有什么办法可以授予REFERENCES允许
  • 模式更新后 jOOQ 生成的类的运行时验证?

    我用org jooq util DefaultGenerator在构建过程中生成 jOOQ 类来表示我的数据库模式 当应用程序运行时 架构预计会在应用程序不知情的情况下发生更改 此类更改可能与已生成的代码兼容 也可能不兼容 如何在运行时检测
  • postgres 有 CLOSEST 运算符吗?

    我正在寻找这样的东西 给定一个表格 id number 1 7 2 1 25 3 1 01 4 3 0 查询SELECT FROM my table WHEREnumberCLOSEST 1 将返回第 3 行 我只关心数字 现在我有一个程序
  • 将大量实体插入 SQL Server 2012 [重复]

    这个问题在这里已经有答案了 我正在进行一个使用 Entity Framework 5 和 SQL Server 2012 的项目 我们需要一次插入大量行 100k 个实体的顺序 基本上 我们有一个物理程序 它输出大量二进制数据 然后我们需要
  • 当“修复表”查询在 mysql 中不起作用时该怎么办?

    我收到此错误 表的存储引擎不支持修复 当我尝试使用查询修复表时repair table tbl college master 表是 innodb 类型 但我不知道我收到此错误 See 手册 http dev mysql com doc re
  • sql查询将两列与一列连接起来

    我在 MS Access 2010 中有 2 个表 如下所示 USERS u id u name LOAN l id l from ref users u id l to ref users u id l amount Users u id
  • 如何在 sqlalchemy 中创建基于文字的查询?

    我创建了一个函数来创建表达式 def test operator1 operation operator2 return literal column operator1 op operation operator2 现在当我用 test
  • 比较表中的行以了解字段之间的差异

    我有一个包含 20 多列的表 客户端 其中大部分是历史数据 就像是 id clientID field1 field2 etc updateDate 如果我的数据如下所示 10 12 A A 2009 03 01 11 12 A B 200
  • PHP 中的 MongoDB - 如何将项目插入集合中的数组中?

    这必须很容易 但我似乎无法弄清楚 假设我有一个集合users这是集合中的第一项 id ObjectId 4d8653c027d02a6437bc89ca name Oscar Godson email email protected cdn
  • 如何有效地从 DB2 表中删除所有行

    我有一个大约有 50 万行的表 我想删除所有行 如果我做简单的delete from tbl 事务日志已满 我不关心这种情况下的事务 无论如何我都不想回滚 我可以删除许多事务中的行 但是有更好的方法吗 如何有效地从 DB2 中的表中删除所有
  • Scrapy - 持续从数据库中获取要爬取的url

    我想不断地从数据库中获取要爬行的网址 到目前为止 我成功地从基地获取了 url 但我希望我的蜘蛛继续从该基地读取 因为该表将由另一个线程填充 我有一个管道 一旦爬行 工作 就会从表中删除 url 换句话说 我想使用我的数据库作为队列 我尝试

随机推荐

  • 处理过期的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 查询来检查列是否为零,它将更新它,如果不是,它将移动到下一列?

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