Android SQLite数据库插入/选择不起作用

时间:2011-10-27 13:19:16

标签: android sqlite select insert

任何人都可以查看我的附加代码并告诉我为什么我没有插入或从数据库中选择任何值。我甚至不知道我没有做什么,因为我没有收到任何错误。我所知道的是,当我运行select查询时,光标不包含任何内容。

由于

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 :(得分:0)

我怀疑你需要提前光标。看来你的代码卡在了(!result.isAfterLast())。除非你使用result.moveToNext()(或以某种其他方式推进游标),否则它将永远不会在最后一次之后,而while语句将无限循环。事实上,如果你只想要一行,你可以完全消除while循环。