2016-12-08 11 views
0

更新:古い問題を解決し、新しい問題を発見しました。それは私のカーソルが行0とcol -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; 
    } 

私はdbにそれらを追加する前に有効なjidとメッセージの値を持っていると確信しています。私がdisplayMessageメソッドでそれを表示しようとすると、私が得るのはヌルです(プログラムはクラッシュしませんが、文字列の値を与えません)

+0

**完全に役に立たないだけでなく、潜在的に危険な**を削除してみてください。 –

答えて

0

あなたの挿入が成功しない可能性があります。 db.insert()を実行すると、行の長い値が返されます。値が0より大きい場合、データは正常に挿入され、-1が返された場合は挿入されません。戻り値を確認してください。以下はサンプルです

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

正しく追加します。問題はカーソル内にあるようですが、行0を読み取れないようなものがあります。col -1 – Prethia

+0

クエリでWHERE 1をなぜ持っているのですか? – Avinash4551

関連する問題