2013-04-05 97 views
0

應用程序不會運行。這種反覆出現:方法查詢db返回結果

04-05 21:29:09.570: E/AndroidRuntime(1069): Caused by: java.lang.IllegalArgumentException: 
    Cannot bind argument at index 1 because the index is out of range. 
    The statement has 0 parameters. 

主 - 調用方法

Cursor wow = db.trying("Gold"); 
     text = (TextView) findViewById(R.id.textView13); 
     String quantity = wow.getString(0); // 
     text.setText(quantity); 

DB處理程序 - 方法

public Cursor trying(String vg){ 
     String q = "SELECT quantity FROM " + TABLE_CONTACTS + " WHERE name=" + "'" + vg +"'"; 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor cursor = db.rawQuery(q, new String[] {vg}); 

      if (cursor != null) { 
       cursor.moveToFirst(); 
      } 
      return cursor; 
    } 
+0

我不明白你爲什麼創建下一個問題,而不是引用前面的錯誤,並給我n ext評論。 – Sajmon 2013-04-05 21:46:45

回答

1

問題是

String q = "SELECT quantity FROM " + TABLE_CONTACTS + " WHERE name=" + "'" + vg +"'"; 

在查詢您已經指定哪裏co。的參數ndition。之後,你再次將其傳遞給查詢

Cursor cursor = db.rawQuery(q, new String[] {vg}); 

這使得混亂。所以試圖改變自己的查詢

String q = "SELECT quantity FROM " + TABLE_CONTACTS + " WHERE name = ?"; 
SQLiteDatabase db = this.getReadableDatabase(); 
Cursor cursor = db.rawQuery(q, new String[] {vg}); 

或者你去爲另一種方法

String q = "SELECT quantity FROM " + TABLE_CONTACTS + " WHERE name=" + "'" + vg +"'"; 
    Cursor cursor = db.rawQuery(q, null); 
    if(cursor != null && cursor.getCount()>0){ 
    cursor.moveToFirst(); 
    //do your action 
    //Fetch your data 

} 
else { 
Toast.makeText(getBaseContext(), "No records yet!", Toast.LENGTH_SHORT).show(); 
    return; 
} 

Refer