用于从Java程序搜索的SQL命令

时间:2017-03-01 16:18:04

标签: java mysql sql jdbc

我试图允许来自我的Java Project的键盘输入从我的数据库中搜索Car License number(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;
}

2 个答案:

答案 0 :(得分:1)

你也错过了单引号和列名..

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

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

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

答案 1 :(得分:0)

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

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

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