我有一个数据库表,一列中包含多个字符串。他们持有车牌号码。如果我搜索1 il获得它找到的第一个注册。我想设置它,以便我必须输入完整的字符串,如果我不应该说不找到。这是我的代码。我确定它只是需要改变它的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 where cLicense like '%" + 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)
如果您需要确切的字符串,则需要删除'%'在LIKE过滤器中。 你的代码应该是:
cLicense like '" + searchLicense + "'
'%'通配符放在您拥有的参数之前和之后,使您可以搜索中间包含searchLicense值的任何字符串,而无需检查该字符串之前或之后的内容。
答案 1 :(得分:0)
您应该使用参数化查询。 Bobby Tables: A guide to preventing SQL injection
然后使用=
代替like
。
select * from eflow.registration where cLicense = @searchLicense