2016-12-08 72 views
0

更新:我解決了老問題,並找到了一個新的。它說我的光標位於第0行和第-1列,因此我的程序崩潰。無法保存或選擇SQLITE的值

我正在編寫一個消息應用程序,我使用SQLite存儲消息,但是當我嘗試選擇它們時,我總是得到一個空集。這裏是相關的類和方法。

public class DBHandler extends SQLiteOpenHelper { 
     private static final int DATABASE_VERSION=1; 
     private static final String DATABASE_NAME="messages.db"; 
     public static final String TABLE_MESSAGES="messages"; 
     public static final String COLUMN_MESSAGE="message"; 
     public static final String COLUMN_JID="jid"; 
     public static final String COLUMN_ID="_id"; 



     public DBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { 
      super(context, DATABASE_NAME, factory,DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase sqLiteDatabase) { 
      String query="CREATE TABLE " + TABLE_MESSAGES + "("+ COLUMN_ID+ " INTEGER PRIMARY KEY AUTOINCREMENT, "+ COLUMN_JID+ " TEXT, "+ COLUMN_MESSAGE +" TEXT " +");"; 
      sqLiteDatabase.execSQL(query); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) { 
      sqLiteDatabase.execSQL(" DROP TABLE IF EXISTS "+ TABLE_MESSAGES); 
      onCreate(sqLiteDatabase); 
     } 

     public void addnewMessage(Messages message){ 
      ContentValues values = new ContentValues(); 
      values.put(COLUMN_JID,message.get_jid()); 
      values.put(COLUMN_MESSAGE,message.get_message()); 
      SQLiteDatabase db=getWritableDatabase(); 
      db.insert(TABLE_MESSAGES,null,values); 
      db.close(); 
     } 
     public String displayMessage(){ 
      SQLiteDatabase db=getWritableDatabase(); 
      String returnthis=""; 
      String query="SELECT * FROM "+ TABLE_MESSAGES + " WHERE 1" ; 
      Cursor c=db.rawQuery(query,null); 
      c.moveToFirst(); 
      while(!c.isAfterLast()){ 
       if(c.getString(c.getColumnIndex("message"))!=null){ 
        returnthis+=c.getString(c.getColumnIndex("message")); 
        returnthis+="\n"; 
       } 
      } 
      db.close(); 
      return returnthis; 
     } 

} 

當我發送消息我用addNewMessage(消息消息)方法到消息的字符串內容錄製到我的數據庫。這是消息的構造函數。

public Messages(String jid, String message){ 
     this._message=message; 
     this._jid=jid; 
    } 

我敢肯定,我將它們添加到數據庫(它們不爲空,我測試)之前具有有效的JID和消息值。當我嘗試用displayMessage方法顯示它時,我認爲我得到的全部爲空(程序不會崩潰,但不會給我一個字符串值)

+0

嘗試刪除「+」WHERE 1「',這不僅**完全無用**,而且還**有潛在危險**。 –

回答

0

可能是您的插入不成功。當你做db.insert()時,它將返回該行的一個長整型值。如果值大於0,則數據插入成功,如果返回-1,則不插入。請檢查返回值。下面是示例

long result =db.insert(TABLE_MESSAGES,null,values); 
+0

它正確添加。問題似乎是在遊標我得到像你一樣的東西不能讀取行0 col -1 – Prethia

+0

你能告訴我爲什麼你有查詢中的WHERE 1? – Avinash4551