Couldn't read row 0, col -1 from CursorWindow


java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. 
Make sure the Cursor is initialized correctly before accessing data from it. 
 
SQLiteDatabase  學習過程中,使用query() 查詢表單數據時,遇到Couldn't read row 0, col -1 from CursorWindow錯誤。
排除建表字段錯誤、拼寫錯誤、query()輸入字段錯誤。當我使用rawQuery()方法取代query()方法,問題就解決了。
 
代碼如下:
1.建表 MyDatabaseHelper
 1     private static final String CREATE_CONTACTS = "create table contact ("
 2             + "id integer primary key autoincrement, "
 3             + "name text, "
 4             + "number text )";
 5 
 6     public MyDatabaseHelper(Context context, String name, CursorFactory factory, int version) {
 7         super(context, name, factory, version);
 8     }
 9 
10     @Override
11     public void onCreate(SQLiteDatabase db) {
12         db.execSQL(CREATE_CONTACTS);        
13     }
2. 查詢 根據searchName查詢表單
 1     private void searchContact(String searchName) {
 2         db = dbHelper.getReadableDatabase();
 3         //Cursor cursor = db.query("contact", new String[] {"name"}, "name = ?", new String[] {searchName}, null, null, null); 
 4         Cursor cursor = db.rawQuery("select * from contact where name = ?", new String[] {searchName});
 5         if(cursor.moveToFirst()) {
 6             //String name = cursor.getString(cursor.getColumnIndex("name"));
 7             String number = cursor.getString(cursor.getColumnIndex("number"));
 8             tv_name.setText(searchName);
 9             tv_number.setText(number);
10             tel = "tel:" + number;
11         }else {
12             tv_name.setText("404! Not Found");
13             tv_number.setText("10086");
14             tel = "tel:10086";
15         }
16         cursor.close();
17         db.close();
18     }

1.當使用query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)

String name = cursor.getString(cursor.getColumnIndex("name")) 

用這句代碼檢驗 可以獲得到name,證明cursor正確指向所要查詢數據。

String number = cursor.getString(cursor.getColumnIndex("number"))

但這句代碼就會報Couldn't read row 0, col -1 from CursorWindow。

getColumnIndex("number") 返回值竟然是-1,百思不得其解!

 

2.使用rawQuery(String sql, String[] selectionArgs)

name和number字段都可以准確獲得,問題完美解決。

 

轉載請注明出處:http://www.cnblogs.com/michaelwong/p/4128299.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM