2016-03-02 72 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