使用简单算术运算和别名时,即使表中的数据不为零,JDBC 查询也会返回零

Posted

技术标签:

【中文标题】使用简单算术运算和别名时,即使表中的数据不为零,JDBC 查询也会返回零【英文标题】:JDBC query returning zero when using simple arithmetic operations and alias even though the data in table is not zero 【发布时间】:2016-10-24 11:14:29 【问题描述】:

我正在通过 android 构建一个 Web 门户,我通过 JDBC 驱动程序运行的查询返回 0,其中数据不应为零。

这是查询:

ResultSet set = statement.executeQuery("select it.itcod,      it.itnam,     it.packn, it.tradp, " +
                    "sum(nvl(itd.slbox,0) - nvl(itd.srbox,0) - nvl(itd.brbox,0) - nvl(itd.gsbox,0)) as sbox, " +
                    "sum(nvl(itd.slbbx,0) - nvl(itd.srbbx,0) - nvl(itd.brbbx,0) - nvl(itd.gsbbx,0)) as sbbx, " +
                    "SUM(NVL(itd.PRBOX,0) - NVL(itd.RPBOX,0) - NVL(itd.TRBOX,0)) as pbox, " +
                    "SUM(NVL(itd.PRBBX,0) - NVL(itd.RPBBX,0) - NVL(itd.TRBBX,0)) as pbbx " +
                    "from items it " +
                    "LEFT join item_daily itd " +
                    "on  (it.cocod = itd.cocod " +
                    "and it.itcod = itd.itcod " +
                    "and ITD.ddate between " + fdate + " and " + tdate + ")" +
                    "WHERE IT.COCOD = " + COCOD +
                    "AND IT.DCODE = " + DCODE +
                    "AND NVL(IT.FREZE,'N')!='Y' " +
                    "group by it.cocod, it.itcod, it.itnam, it.packn, " +
                    "       it.tradp, it.pkqty, it.dcode, it.freze, " +
                    "       it.ishow, it.sltax, it.dcont, it.mcode, " +
                    "       it.nwcod " +
                    "order by itnam ");

我尝试过使用结果集元数据,但这也不起作用。

【问题讨论】:

你能通过 sql plus/sql developer 运行它,看看是否能得到你想要的输出吗? 我通过保持工具运行它,它确实给了我想要的结果,所以我确定数据不存在@pahariayogi 请注意,如果 fdate、tdate、COCOD 或 DCODE 来自用户输入,则查询容易受到 SQL 注入攻击。考虑使用PreparedStatement 【参考方案1】:

你应该小心这条线

 + fdate + " and " + tdate 

因为你应该这样使用:

" .. to_date('"+fdate+"','***your_date_format') and to_date('"+fdate+"','***your_date_format')"

【讨论】:

我一直在通过保持工具运行这个查询并且数据返回正常..我也试过这个但是这会引发其他异常 你试过我的解决方案了吗? 我做了,仍然返回零,这个错误真的让我的应用程序陷入了死胡同,希望有任何其他解决方案 您的具体查询是什么?你能写在编辑器上运行它吗?没有参数?

以上是关于使用简单算术运算和别名时,即使表中的数据不为零,JDBC 查询也会返回零的主要内容,如果未能解决你的问题,请参考以下文章

40篇学完C语言——(第七篇)地址算术运算

为啥即使我们将指针分配给NULL,指针的指向对象的大小也不为零?

在 SQL 中对别名进行算术运算

CWE-369:Divide By Zero除数有可能为零缺陷是如何产生的?

Linux-shell-算术运算{exprbcdc(( ))和[ ]}

为啥麦克风关闭时基频和幅度不为零?