Java 优化/改进我的SQL更新
好吧,让我先说一下。我对SQL非常陌生,对它了解不多。我最近才开始使用它,我一直在努力学习和改进它。请解释你所说的一切,因为我可能不理解常用术语等 我编写的SQL代码现在的工作方式与我的预期一致,但字符串似乎令人讨厌,让我觉得这不太可能是正确的Java 优化/改进我的SQL更新,java,mysql,sql,optimization,Java,Mysql,Sql,Optimization,好吧,让我先说一下。我对SQL非常陌生,对它了解不多。我最近才开始使用它,我一直在努力学习和改进它。请解释你所说的一切,因为我可能不理解常用术语等 我编写的SQL代码现在的工作方式与我的预期一致,但字符串似乎令人讨厌,让我觉得这不太可能是正确的 INSERT INTO reputations(uuid, warn, bandate, reasons, mods) VALUES ('{0}', '{1}', '{2}', CONCAT(reasons, '{3}'), CONCAT(mod
INSERT INTO reputations(uuid, warn, bandate, reasons, mods)
VALUES ('{0}', '{1}', '{2}', CONCAT(reasons, '{3}'), CONCAT(mods, '{4}'))
ON DUPLICATE KEY UPDATE warn = '{1}',
bandate = '{2}',
reasons=CONCAT(reasons, '{3}'),
mods=CONCAT(mods, '{4}')
在我的Java代码中,它如下所示:
正如您可能也看到的,我不知道如何正确格式化/缩进所有内容,以便像这样使用。任何提示都将不胜感激
我还应该解释一下,{n}
只是我用所需信息替换它的空间。例如,我用UUID替换所有{0}
所以,我的问题是。有更好的方法吗?任何提示或帮助都将不胜感激。干杯 我不明白这部分:
VALUES ('{0}', '{1}', '{2}', CONCAT(reasons, '{3}'), CONCAT(mods, '{4}'))
------------------------------------^
列名的使用应该会产生错误
也许这就是你想要的陈述:
INSERT INTO reputations(uuid, warn, bandate, reasons, mods)
VALUES ('{0}', '{1}', '{2}', '{3}', '{4}')
ON DUPLICATE KEY UPDATE warn = VALUES(warn),
bandate = VALUES(bandate),
reasons = CONCAT(reasons, VALUES(reasons)),
mods = CONCAT(mods, VALUES(mods));
在重复键上的部分中,可以使用VALUES()
从特定列获取新值。此外,我怀疑您可能真的希望为最后两个连接使用分隔符:
reasons = CONCAT_WS('; ', reasons, VALUES(reasons)),
mods = CONCAT_WS('; ', mods, VALUES(mods));
使用CONCAT_WS()。记住sql注入的参数化查询如果您正在使用Eclipse,请参阅以了解如何禁用该格式,以便可以根据需要格式化sql。