来自 LIKE 语句的 SQLite select 不起作用?
SQLite select from LIKE statement not working?
当我查看数据库和 运行 这个查询时,我得到了预期的结果。
SELECT * FROM users WHERE options LIKE '%[-15,-3]%';
然而,当我使用如下所示的准备语句时,uuid 为空。
String opt = "[-15,-3]"; //example
PreparedStatement ps = SQLite.connection.prepareStatement(
"SELECT * FROM users WHERE options LIKE '%" + opt + "%'"
);
ResultSet rs = ps.executeQuery();
String uuid = null;
while (rs.next()){
uuid = rs.getString("member");
}
rs.close();
ps.close();
if(uuid != null){
System.out.println("not null: " + uuid);
return Database.getUser(UUID.fromString(uuid);
}
对于上面的代码,结果集中没有返回任何内容。这很奇怪,因为我对 SQLite 查看器使用了相同的查询,它返回了正确的行。我该如何解决这个问题?我没有发现问题。
更新
当我在准备语句中直接使用 "SELECT * FROM factions WHERE claims LIKE '%[-15,-3]%'"
而不是变量时,它工作正常。为什么我不能使用字符串变量?我已经检查了变量,它打印到控制台很好。
经过反复试验我解决了这个问题,原来我应该使用 ?
并设置字符串。
PreparedStatement ps = SQLite.connection.prepareStatement(
"SELECT * FROM users WHERE options LIKE ?"
);
ps.setString(1, "%" + opt + "%");
当我查看数据库和 运行 这个查询时,我得到了预期的结果。
SELECT * FROM users WHERE options LIKE '%[-15,-3]%';
然而,当我使用如下所示的准备语句时,uuid 为空。
String opt = "[-15,-3]"; //example
PreparedStatement ps = SQLite.connection.prepareStatement(
"SELECT * FROM users WHERE options LIKE '%" + opt + "%'"
);
ResultSet rs = ps.executeQuery();
String uuid = null;
while (rs.next()){
uuid = rs.getString("member");
}
rs.close();
ps.close();
if(uuid != null){
System.out.println("not null: " + uuid);
return Database.getUser(UUID.fromString(uuid);
}
对于上面的代码,结果集中没有返回任何内容。这很奇怪,因为我对 SQLite 查看器使用了相同的查询,它返回了正确的行。我该如何解决这个问题?我没有发现问题。
更新
当我在准备语句中直接使用 "SELECT * FROM factions WHERE claims LIKE '%[-15,-3]%'"
而不是变量时,它工作正常。为什么我不能使用字符串变量?我已经检查了变量,它打印到控制台很好。
经过反复试验我解决了这个问题,原来我应该使用 ?
并设置字符串。
PreparedStatement ps = SQLite.connection.prepareStatement(
"SELECT * FROM users WHERE options LIKE ?"
);
ps.setString(1, "%" + opt + "%");