Android studio: динамически создавать запрос выбора sqlite в зависимости от значений в массиве json - PullRequest
0 голосов
/ 22 января 2020

Я работаю в Android студии (java). Я работаю с базой данных sqlite, и я хочу иметь возможность запросить таблицу. В настоящее время я использовал бы следующий код: ''

                    String strQuery = "select * from table where var1 = ?";

                    SQLiteStatement stmt = sqLiteDatabase.compileStatement(strQuery);
                    stmt.bindString(1, String.valueOf(strVarOne));
                    stmt.execute();

''

Но мне нужно динамически построить инструкцию WHERE. В настоящее время у меня есть массив json, который я хочу использовать для построения оператора where, который выглядит следующим образом (например).

[{"country":"South Africa"},{"province":"Gauteng"}]

В приведенном выше примере я бы хотел, чтобы запрос выглядел следующим образом:

"select * from table where country = 'South Africa' and province= 'Gauteng' "

Может кто-нибудь помочь с тем, как я могу динамически создавать и выполнять этот запрос в зависимости от массива json? Помните, что массив json может измениться - значения могут отличаться и их может быть больше.

1 Ответ

0 голосов
/ 23 января 2020
class Place {
     @SerializedName("country")
     String country = null;
     @SerializedName("province")
     String province = null;
}

Type token = new TypeToken<ArrayList<Place>>(){}.type
String yourJson = "[{\"country":\"South Africa\"},{\"province\":\"Gauteng\"}]";
Gson gson = new Gson();

ArrayList<Place> places = gson.fromJson(yourJson, token);

String selectFormat = "select * from table where %$1s = '%$2s' and %$3s = '%$4s' "

ArrayList<String> selectArguments = new ArrayList<String>();

for(int i=0; i<places.size(); i++){
  if(places.country!=null){
     selectArguments.add("country");
     selectArguments.add(places.country);
  }else if(places.province != null) {
    selectArguments.add("province");
     selectArguments.add(places.province);
  }
}

Я не буду go рассказывать вам, как избежать SQL инъекции.

String fullSQLStatement = String.format(selectFormat,selectArguments.toArray(new String[selectArguments.size()]);

fullSQLStatement станет select * from table where country = 'South Africa' and province = 'Gauteng'

...