Android SQLite Вставка базы данных / выберите не работает - PullRequest
3 голосов
/ 27 октября 2011

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

Спасибо

SQLiteDatabase db = new DatabseHelper(this).getWritableDatabase();
          //  db.execSQL(mDATABASE_CREATE);
            String id = "1";
            String feedback = "this is some feedback";
            String expiredAt = "12:00";
            String priority = "1";
            String read = "false";
            String sql =   "INSERT INTO feedbackTable (_id, feedback, expiredAt, priority, read) VALUES (\""+id+"\", \""+feedback+"\", \""+expiredAt+"\", \""+priority+"\", \""+read+"\")"; 
            db.rawQuery(sql, null);
            Cursor result = db.rawQuery("SELECT * FROM feedbackTable", null);
            result.moveToFirst();

            String rfeedback="";
            while(!result.isAfterLast()){
                rfeedback=result.getString(1);
            }

        Log.e("returned feedback", "inserted feedback "+rfeedback);
            db.close();

Вторая проблема после изменения вышеуказанного кода:

SQLiteDatabase db = new DatabseHelper(this).getWritableDatabase();
            String id = "1";
            String feedback = "this is some feedback";
            String expiredAt = "12:00";
            String priority = "1";
            String read = "false";
            String sql =   "INSERT INTO feedbackTable (_id, feedback, expiredAt, priority, read) VALUES (\""+id+"\", \""+feedback+"\", \""+expiredAt+"\", \""+priority+"\", \""+read+"\");"; 


            ContentValues values = new ContentValues(5);
            values.put("_id", "1");
            values.put("feedback", "some feedback");
            values.put("expiredAt", "12:00");
            values.put("priority", "1");
            values.put("read", "false");
            db.insert("feedbackTable", "_id", values);
            Cursor result = db.rawQuery("SELECT * FROM feedbackTable", null);
            //db.execSQL(sql);
            //insert(feedbackTable, nullColumnHack, values)
            //.rawQuery(sql, null);
            result.moveToFirst();

            String rfeedback="";
            while(!result.isAfterLast()){
                rfeedback=result.getString(1);
            }

            Log.e("returned feedback", "inserted feedback "+rfeedback);
            db.close();

Используя execSQL и db.insert, мое приложение просто зависает в ожидании ответа. Я никогда не доходил до Log.e выше и потому что это действие происходит в методе oncreate до рисования экрана, я вижу только пустой экран. Есть идеи почему?

1 Ответ

0 голосов
/ 27 октября 2011

Я подозреваю, что вам нужно продвинуть курсор.Может показаться, что ваш код застрял в while (! Result.isAfterLast ()).Если вы не используете result.moveToNext () (или каким-либо другим образом продвигаете курсор), он никогда не будет после последнего, а оператор while будет зацикливаться бесконечно.Фактически, если вы ожидаете только одну строку, вы можете просто полностью исключить цикл while.

...