【问题标题】:Trying to check if values exists in MySQL尝试检查 MySQL 中是否存在值
【发布时间】:2015-04-28 07:27:07
【问题描述】:

我正在尝试检查数据库中是否已经存在玩家姓名和受邀玩家姓名,我试试这个:

 public boolean isFriends(ProxiedPlayer inviter, ProxiedPlayer invited) {
    try {
        Statement sql = mySql.getConnection().createStatement();
        ResultSet resultSet = sql.executeQuery("SELECT * FROM `friends` WHERE `friendinviter`='" + inviter.getName() + "'`invitedfriend`='" + invited + "';");
        ProxyServer.getInstance().broadcast("1");
        if(resultSet.next()) {
            sql.close();
            resultSet.close();
            return true;
        }
        sql.close();
        resultSet.close();
        return false;
    }catch (SQLException e) {
        e.printStackTrace();
        return false;
    }
}

我尝试通过尝试获取它在结果集中返回的内容来调试它,但到目前为止代码从未出现过。

【问题讨论】:

  • 您的 SQL 语法不正确。检查 SQL 语句是否有效。此外,您应该使用PreparedStatement 而不是连接字符串来创建 SQL 语句。
  • 在我看来,您在表中通过名称 (inviter.getName) 引用另一个用户 - 这取决于您的用例,但通常您希望通过 ID 而不是名称来引用其他实体

标签: java mysql sql jdbc


【解决方案1】:

我的第一个建议是您应该在这部分代码中使用PreparedStatement

其次在"SELECT * FROM friends WHERE friendinviter='" + inviter.getName() + "'invitedfriend='" + invited + "';" 行中"'invitedfriend='" + invited 部分我认为需要将VARCHAR 作为参数传递,但您传递的是ProxiedPlayer 的实例。所以更正后的代码应该是:

"SELECT * FROM `friends` WHERE ` friendinviter`='" + inviter.getName() + "'`invitedfriend`='" + invited.getName() + "';"

【讨论】:

    【解决方案2】:

    你有一个语法错误:

       ResultSet resultSet = sql.executeQuery("SELECT * FROM `friends` WHERE `friendinviter`='" + inviter.getName() + "' and `invitedfriend`='" + invited + "';");
    

    你错过了 where 线索中的逻辑运算符。

    您应该了解准备好的语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      • 2012-11-11
      相关资源
      最近更新 更多