2016-03-02 63 views
0

當我建立一個SQLiteDatabaseandroid的sqlite的光標

public static final String CREATE_BOOK = "create table Book(" + "id integer primary key autoincrement," + "author text," + "price real," + "pages integer," + "name text," + "category_id integer)"; 

然後有一個按鈕add_data工具

add_data.setOnClickListener(new View.OnClickListener() { 
    @Override 
      public void onClick(View v) { 
       SQLiteDatabase db = dbhelper.getWritableDatabase(); 
       ContentValues values = new ContentValues(); 
       values.put("author", "jose"); 
       values.put("name", "Thank you!"); 
       values.put("pages", 999); 
       values.put("price", 99.9); 
       db.insert("Book", null, values); } 
     }); 

,我想查詢表

query_data.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       SQLiteDatabase db = dbhelper.getWritableDatabase(); 
       Cursor cursor = db.query("Book", null, null, null, null, null, null); 
       if(cursor.moveToFirst()){ 
        do { 
         String name = cursor.getString(cursor.getColumnIndex("name")); 
         String author = cursor.getString(cursor.getColumnIndex("author")); 
         int pages = cursor.getInt(cursor.getColumnIndex("pages")); 
         double price = cursor.getDouble(cursor.getColumnIndex("price")); 
         Log.d("MainActivity", "book name is" + name); 
         Log.d("MainActivity", "book author is" + author); 
         Log.d("MainActivity", "book pages is" + pages); 
         Log.d("MainActivity", "book prices is" + price); 
        }while (cursor.moveToNext()); 
       } 
       cursor.close(); 
      } 
     }); 

而且我運行它,有一些錯誤:無法從具有1行5列的CursorWindow讀取行0,列-1。在從中訪問數據之前,確保Cursor已正確初始化。

最後,我交換add_data工具是「作者」和「名」的順序,運行

什麼是它的問題?謝謝!

回答

0

如果您希望在完成時保存值,則您需要處於事務處理中(並提交它)。

SQLiteDatabase db = this.getWritableDatabase(); 
db.beginTransaction() 

...插入,更新,刪除等

if (ok) { 
    db.setTransactionSucessful(); 
} 
db.endTransaction(); 
db.close(); 
0

試試這個
讀取數據使用

this.getReadableDatabase() 

您使用

getWritableDatabase() 

in query_data.setOnClickListener