Java 优化/改进我的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

好吧,让我先说一下。我对SQL非常陌生,对它了解不多。我最近才开始使用它,我一直在努力学习和改进它。请解释你所说的一切,因为我可能不理解常用术语等

我编写的SQL代码现在的工作方式与我的预期一致,但字符串似乎令人讨厌,让我觉得这不太可能是正确的

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。