我以前试过这个说法:
public Cursor searchForSchools(String[] args) throws SQLException {
String myQuery = "SELECT skola._id, skola.naziv, skola.privatna, skola.adresa, opstina.naziv, skola.broj_ucenika, skola.telefon, skola.web, oblast.naziv " +
"FROM skola JOIN opstina ON skola.id_opstina = opstina._id " +
"JOIN profil ON skola.id_tip = profil._id " +
"JOIN oblast_m ON profil._id = oblast_m.id_profil " +
"JOIN oblast ON oblast_m.id_oblast = oblast._id ";
return database.rawQuery(myQuery + "WHERE skola.naziv LIKE \"%?%\" AND opstina.naziv = ? AND skola.broj_ucenika ? AND skola.oblasti LIKE \"%?%\" AND skola.privatna ?", args);
但这不起作用,因为 SQL 语法错误。
所以现在,我正在尝试用以下方法构建子句的第二部分:
public Cursor searchForSchools(String[] args) throws SQLException {
String myQuery = "SELECT skola._id, skola.naziv, skola.privatna, skola.adresa, opstina.naziv, skola.broj_ucenika, skola.telefon, skola.web, oblast.naziv " +
"FROM skola JOIN opstina ON skola.id_opstina = opstina._id " +
"JOIN profil ON skola.id_tip = profil._id " +
"JOIN oblast_m ON profil._id = oblast_m.id_profil " +
"JOIN oblast ON oblast_m.id_oblast = oblast._id ";
return database.rawQuery(myQuery + buildQueryString(args), null);
}
private String buildQueryString(String[] args) {
String buildString="WHERE";
if(args[0]!="*")
buildString += " skola.naziv LIKE %\"" + args[0] + "\" AND";
if(args[1]!="*")
buildString += " opstina.naziv = \"" + args[1] + "\" AND";
if(args[2]!="*")
buildString += " skola.broj_ucenika " + args[2] + "\" AND";
if(args[3]!="*")
buildString += " oblast.naziv LIKE %\"" + args[3] + "\" AND";
buildString += " skola.privatna " + args[4];
return buildString;
}
问题是有时 args 数组包含 ' '(星号),这表明查询与该列不相关(即任何值都是可接受的)但是在第一种调用方法中会导致像“WHERE opstina”这样的子句.naziv = ' '" 返回错误...
所以让我解释一下我的目标 - 我想创建一个动态 SQL 语句,它可以处理返回所有数据的所有情况(当 args[]={' ',' ',' ',' ',' '} 时)最复杂的情况是每个 args 字符串的值都不同于“ ”。提前致谢...