Как искать через БД с помощью курсора (sqlite query) в Android - PullRequest
1 голос
/ 02 июня 2011

Я начинающий Android.Я пытаюсь спроектировать это простое приложение, которое берет название города от пользователя, используя представление editText, сравнивает его в базе данных и возвращает почтовый индекс этого города.Теперь у меня проблема с реализацией курсоров.Пожалуйста, помогите. Как я могу запросить базу данных, чтобы получить соответствующий код.

        EditText city;
    Button add,show1;
    RadioGroup choose;
    String k;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        try
        {   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //final ContentValues values = new ContentValues();
        city=(EditText)findViewById(R.id.editText1);
        add=(Button)findViewById(R.id.add);
        choose=(RadioGroup)findViewById(R.id.radio01);
        show1=(Button)findViewById(R.id.button1);
        k=city.getText().toString();
        createDatabase();
    }
        catch(Exception e)
        {

        }


show1.setOnClickListener(new View.OnClickListener() {


    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        db=openOrCreateDatabase(DATABASE_NAME,Context.MODE_PRIVATE,null);
        try{

        if(k == "CITY")
        {
            String[] result_columns=new String[]{"_id","CITY","CODE"};
            Cursor cursor = db.query(TABLE_NAME, result_columns, 
                    "CITY" +"=?", new String[]{"k"}, null, null, null);

    cursor.moveToFirst();

        String xnewcode=cursor.getString(0);
        Toast.makeText(activity1.this, xnewcode, Toast.LENGTH_LONG).show();
        cursor.moveToNext();

            //db.close();
        }}
        catch(Exception e)
        {
            Toast.makeText(activity1.this,"Fault in showing " + e,Toast.LENGTH_LONG).show();

        }

    }

});

Ответы [ 4 ]

0 голосов
/ 14 июня 2013
Cursor cursor = db.rawQuery("select _id,city,code 
      FROM city where city_name like '"+s+"%' order by city", null);

s - ваша строка ввода символов в поле поиска.

используйте ссылки ниже, это очень полезно при разработке приложений для Android.

http://samir -мангролия.blogspot.in/2012/05/android-sectioned-listview-with-search_6865.html

0 голосов
/ 02 июня 2011

Я думаю, что вы забыли получить результат в цикле

String[] result_columns=new String[]{"_id","CITY","CODE"};
        Cursor cursor = db.query(TABLE_NAME, result_columns, 
                "CITY" +"=?", new String[]{"k"}, null, null, null);

do {

                        String xnewcode = cursor.getString(0);
                        System.ouot.println("...display the result..."+xnewcode);
                    }while (cursor.moveToNext());
                    }

Посмотрите на Пример проекта

или

Учебник по sqlite базе данных для android

Спасибо Дипак

0 голосов
/ 02 июня 2011

Я думаю, что вы забыли некоторые чеки. Тем не менее, это действительно зависит от языка, на котором написаны города - оператор SQLite "LIKE" нечувствителен к регистру только для английских букв. Если ваши города написаны на другом языке, попробуйте сохранить их в верхнем / нижнем регистре в базе данных и преобразовать входную строку в верхний / нижний регистр в java (String.toUpper / LowerCase ()).

String[] result_columns=new String[]{"_id","CITY","CODE"};
        Cursor cursor = db.query(TABLE_NAME, result_columns, 
                "CITY" +" like '%?%'", new String[]{"k"}, null, null, null);

if(cursor != null)
{
  while(cursor.moveToNext())
  {
    String xnewcode=cursor.getString(1);
    Toast.makeText(activity1.this, xnewcode, Toast.LENGTH_LONG).show();
  }
}

Вы можете сохранить все результаты в массиве и показать их пользователю, попросив его выбрать правильный.

РЕДАКТИРОВАТЬ: Если вы не знакомы, оператор "x LIKE Y" сравнивает x с любой подстрокой из Y с length = x.length. Это очень полезно, потому что вы не можете гарантировать, что пользователь введет название всего города. Так что в моем примере, если пользователь вводит «йорк», курсор возвращает значения, такие как «нью-йорк», «йоркшир», «йорк» и т. Д.

0 голосов
/ 02 июня 2011
 Cursor   mCursor = db.rawQuery("select ZIPCODE from TABLENAME where CITYNAME= ? ", new String[]{"NEWYORK"});

надеюсь, вы получили только один результат.

затем получить его (в случае строкового значения) mCursor.getString(coloumn_id)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...