2017-04-25 87 views
-2

我有兩個按鈕,一個將數據添加到數據庫,另一個獲取所有數據。表是我的類包含有關表(Table.TABLE_NAME ==「表」)的信息。但光標總是空的。我試過這個db.query(Table.TABLE_NAME,null,null,null,null,null,null),它也不起作用。光標爲空

public void onClick(View v) { 
      DBHelper dbHelper = new DBHelper(this); 
      SQLiteDatabase db = dbHelper.getWritableDatabase(); 
      Cursor cursor = null; 
      switch (v.getId()){ 
       case R.id.btnAdd: 
        ContentValues contentValues = new ContentValues(); 
        contentValues.put("Name",etName.getText().toString()); 
        contentValues.put("Surname",etSurname.getText().toString()); 
        contentValues.put("Age",etAge.getText().toString()); 
        contentValues.put("City",etCity.getText().toString()); 
        db.insert(Table.TABLE_NAME,null,contentValues); 
        Log.d(TAG,etName.getText().toString() +" " + etSurname.getText().toString() +" " + etAge.getText().toString()+" " + etCity.getText().toString()); 
        break; 
       case R.id.btnSearch: 
        cursor = db.rawQuery("select * from "+Table.TABLE_NAME,null); 
        break; 
      } 
      if (cursor != null) { 
       if(cursor.moveToFirst()) { 
        String str; 
        do { 
         str = ""; 
         for (String cn : cursor.getColumnNames()) { 
          str = str.concat(cn + " = " + cursor.getString(cursor.getColumnIndex(cn)) + "; "); 
         } 
        } while (cursor.moveToNext()); 
       } 
       cursor.close(); 
      }else { 
       Log.d(TAG,"null"); 
      } 
      db.close(); 
     } 
+0

確保您的應用達到行'情況R.id.btnSearch'?當然你在桌上有東西嗎?表格定義是怎樣的? – Trinimon

回答

0

您的光標始終爲空,因爲您從不初始化它。 嘗試是這樣的:

 Cursor cursor = db .query(TABLE_NAME, columns, null, null, null, null, null); 

但是你的開關塊外 - 否則就不能達到。

使用調試器,它會告訴你所有你需要知道實際發生的事情。

你也可以考慮使用https://github.com/square/sqlbrite; 它會幫助你在各種情況下同步你的數據。

0

使用dbHelper.getReadableDatabase()從數據庫中獲取數據。

試試這個:

 case R.id.btnSearch: 
       db = dbHelper.getReadableDatabase(); 
       cursor = db.rawQuery("select * from "+Table.TABLE_NAME,null); 
       break; 
+1

如果這改變了'rawQuery'的輸出,那就不太可能了。 – Trinimon