【问题标题】:SQL Command to search from Java program从 Java 程序中搜索的 SQL 命令
【发布时间】:2017-03-01 16:18:03
【问题描述】:

我正在尝试允许来自我的 Java 项目的键盘输入以从我的数据库中搜索汽车牌照号码 (VARCHAR)。我在我的测试程序类中收到关于 SQL 语法错误的错误。正确的程序是什么,以便在我搜索许可证时它会显示该许可证。提前致谢

public Car getCar(String searchLicense) {
    Car foundCar = 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.cLicense where="+searchLicense);

        while (resultSet.next()) {
            foundCar = 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 foundCar;
}

【问题讨论】:

  • 添加错误信息
  • 您的 SQL 语法有误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“.cLicense where=”附近使用正确的语法
  • eflow.registration.cLicense 应该是什么?
  • 简单看一下代码... cLicense 是一个字段,对吧?您从 TABLE 而不是字段中选择。您的 where 子句也不正确。将其更改为 " where cLicense = 'VALUE'
  • 不知道架构...尝试 "select * from eflow.registration where cLicense = '" + searchLicense + "';"

标签: java mysql sql jdbc


【解决方案1】:

您还缺少单引号和列名..

resultSet = statement.executeQuery(
                    "select * from eflow.registration.cLicense where cLicenseName='"+searchLicense+"'");

更好的解决方案,试试这个..

  resultSet = statement.executeQuery(
                "select * from eflow.registration.cLicense where cLicenseName like '%"+searchLicense+"%'");

【讨论】:

  • he select from db.table.column eflow.registration.cLicense 你检查了吗,这是你解决的第二个错误 :)
  • 但是他没有具体提到任何列名和表名。
【解决方案2】:

您正在谈论的直接问题是您的查询缺少引号,因为它是一个字符串。所以@Dakoda 在 cmets 中的建议应该可以解决它。

然而,这里更大的问题是您很容易受到SQL injection 的攻击,因为您允许用户输入您的查询。如果我输入xxx' or 'a' ='a 之类的输入,我将能够获取您的整个数据库。

你应该使用参数化查询来保护自己

【讨论】:

  • 这是我在更改代码后收到的消息您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在第 1 行的 '' 附近使用的正确语法
猜你喜欢
  • 1970-01-01
  • 2013-02-23
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多