【问题标题】:Returning Data from database by searching through two columns通过搜索两列从数据库中返回数据
【发布时间】:2017-08-21 18:16:20
【问题描述】:

我希望在用户输入同时匹配 cUsername 和 cPassword 时显示所有字段。对此进行测试时,我的 SQL 语法出现错误(靠近 cPassword 的位置)。有人可以提出这个问题吗?请注意我还没有完成 SQL 注入...

public Car getLogin(String searchUser, String searchPass) {
    Car foundCar1 = new Car();
    try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection(url + dbName, userName, password);
        statement = conn.createStatement();
        resultSet = statement.executeQuery("select * from eflow.registration where cUsername like '" + searchUser
                + "' AND where cPassword like '" + searchPass + "'");

        while (resultSet.next()) {
            foundCar1 = new Car(resultSet.getInt("cID"), resultSet.getString("cLicense"),
                    resultSet.getInt("cJourneys"), resultSet.getString("cUsername"),
                    resultSet.getString("cPassword").toString());
        }
        conn.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return foundCar1;
}

【问题讨论】:

  • 你应该改掉这个坏习惯,学习如何使用prepareStatments。 "select * from eflow.registration where cUsername like '" + searchUser + "' AND where cPassword like '" + searchPass + "'"

标签: java sql database command line


【解决方案1】:

除了您的错误之外,这里还有一些问题。该错误是由多个 where 子句引起的。通过更改来解决此问题:

AND where cPassword likeAND cPassword like

我看到的另一件事是 like 应该与通配符一起使用,因此您可能想要更改:

resultSet = statement.executeQuery("select * from eflow.registration where cUsername like '" + searchUser
            + "' AND where cPassword like '" + searchPass + "'");

到:

resultSet = statement.executeQuery("select * from eflow.registration where cUsername like '%" + searchUser
            + "%' AND cPassword like '%" + searchPass + "%'");

除非您正在寻找完全匹配,在这种情况下,我会删除 like 并改用“=”。

【讨论】:

  • 这非常有效。感谢您的帮助
  • 不客气,如果解决了您的问题,请标记答案,谢谢!
猜你喜欢
  • 1970-01-01
  • 2022-01-19
  • 2017-11-09
  • 2013-05-11
  • 2013-03-05
  • 2022-11-24
  • 1970-01-01
  • 2014-09-18
  • 2016-03-22
相关资源
最近更新 更多