2011-10-27 79 views
3

任何人都可以看看我附加的代碼,並告訴我爲什麼我沒有插入或從數據庫中選擇任何值。我什至不知道我沒有做什麼,因爲我沒有得到任何錯誤。我所知道的是,當我運行select查詢時,光標不包含任何內容。Android SQLite數據庫插入/選擇不工作

感謝

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方法中,所以我只看到一個空白屏幕。任何想法爲什麼?

+0

查看[本] [1]帖子。嘗試使用db.insert()而不是db.rawQuery()。 [1]:http://stackoverflow.com/questions/2616130/android-insert-into-sqlite-database – Jack

+0

是的,我看到 - I前人的精力已經使用execSQL或db.insert。我已經嘗試過,現在都有一個新的問題,所以也必須有第二個問題。 –

+0

擺脫您的額外引號。您不應該需要將「值」插入到字符串中。要麼根本不包圍,要麼使用單引號「' – Jack

回答

0

我懷疑你需要推進你的光標。看起來你的代碼被卡在while(!result.isAfterLast())中。除非result.moveToNext()(或以某種其他方式推進遊標),否則它將永遠不會在最後之後,while語句將無限循環。事實上,如果你期望只有一行,你可以完全消除while循環。

+0

非常感謝!那讓我瘋狂。我還要感謝傑克的幫助。兩個菜鳥的錯誤! –