【问题标题】:On Duplicate Key Update Java关于重复密钥更新 Java
【发布时间】:2017-09-30 23:56:30
【问题描述】:

我正在使用 Google SQL。我有一个程序,如果数据库中有相同的用户名,用户可以更改数据库的数据。用户正在使用 POST 将他们的信息发布到数据库。在参考了几个 StackOverFlow 问题和答案后,我设法找到了下面的代码,但它不起作用。

try{
    Class.forName("com.mysql.jdbc.GoogleDriver");
    conn = DriverManager.getConnection(DB_URL);
    String sql = "INSERT INTO 'data' ('username', 'UUID', 'tenant_id', 'site_id')" 
    + "VALUES(?, ?, ?, ?)" 
    + "ON DUPLICATE KEY UPDATE" 
    + "UUID = VALUES(UUID), tenant_id = VALUES(tenant_id), site_id = VALUES(site_id)";
    stat = conn.prepareStatement(sql);
    stat.setString(1, UserName1);
    stat.setString(2, UUID1);
    stat.setString(3, Tenant_ID1);
    stat.setString(4, Site_ID1);
    stat.executeUpdate();
    stat.close();
    conn.close();
}

我的代码可以在没有ON DUPLICATE KEY UPDATE 的情况下工作,但在添加之后,它变得无法工作。我还是 Java 和 SQL 的新手,并准备在这里接受用户的任何意见。谢谢大家的回答。

【问题讨论】:

  • 你现在遇到的错误是什么
  • 嗨@MohanaPriyan 我没有收到任何错误。当用户名相同时,我无法更改数据库中的数据。
  • 我认为,您需要在“重复键更新”之后留出空间
  • UPDATE" + " UUID之间需要一个空格
  • 嗨。 MohanaPriyan 和 YCF_L 首先,在说您的两个答案都不起作用之前,我想为没有进行进一步的故障排除而道歉。在我做了一些故障排除后,我意识到错误是'data' ('username', 'UUID', 'tenant_id', 'site_id') 应该是data(username, UUID, tenant_id, site_id) 以及 UPDATE 和 UUID 之间的空格。非常抱歉,感谢您的建议。

标签: java mysql sql google-app-engine google-cloud-sql


【解决方案1】:

感谢@MohanaPriyan 和@YCF_L 的建议。我设法解决了这个问题。正确的代码应该是

String sql = "INSERT INTO data (username, UUID, tenant_id, site_id)" + "VALUES(?, ?, ?, ?)" + "ON DUPLICATE KEY UPDATE" + " UUID = VALUES(UUID), tenant_id = VALUES(tenant_id), site_id = VALUES(site_id)";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 2018-06-24
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多