我试图允许来自我的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;
}
答案 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
之类的输入,我将能够获取整个数据库。
您应该使用参数化查询来保护自己