2012-05-28 40 views
0

嗨,我是Android開發新手。我遇到的問題是我可以成功創建表並向表中添加數據,但是我無法從數據庫中檢索數據,並且arraylist始終返回空值。請幫我:-)無法從Android SQLite數據庫檢索數據

public class DatabaseHandler extends SQLiteOpenHelper 
{ 
// All Static variables 
    // Database Version 
    private static final int DATABASE_VERSION = 1; 

    // Database Name 
    private static final String DATABASE_NAME = "BloodPressureRecorder"; 

    // Bloodpressure table name 
    private static final String TABLE_BLOOD_PRESSURE = "BloodPressure"; 

    // Bloodpressure Table Columns names 
    private static final String KEY_SYS = "sys"; 
    private static final String KEY_DIA = "dia"; 
    private static final String KEY_RATE = "rate"; 
    SQLiteDatabase db; 


    public DatabaseHandler(Context context) 
    { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    // Creating tables 
@Override 
public void onCreate(SQLiteDatabase db) 
{ 
    String CREATE_BLOODPRESSURE_TABLE = "CREATE TABLE " + TABLE_BLOOD_PRESSURE +        
      "(" + KEY_SYS + " INTEGER," + KEY_DIA + " INTEGER, " 
      + KEY_RATE + " INTEGER" + ")"; 
      db.execSQL(CREATE_BLOODPRESSURE_TABLE); 
} 

// Upgrading database 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
{ 
    // Drop older table if existed 
      db.execSQL("DROP TABLE IF EXISTS " + TABLE_BLOOD_PRESSURE); 

      // Create tables again 
      onCreate(db); 

} 

// Adding new blood pressure 
public void addBloodPressure(BloodPressureResult bloodPressure) 
{ 
    SQLiteDatabase db = this.getReadableDatabase(); 

      ContentValues values = new ContentValues(); 
      values.put(KEY_SYS, bloodPressure.getSys()); // Systolic 
      values.put(KEY_DIA, bloodPressure.getDia()); // Diastolic 
      values.put(KEY_RATE, bloodPressure.getRate()); // Rate 

      // Inserting Row 
      db.insert(TABLE_BLOOD_PRESSURE, null, values); 
      db.close(); // Closing database connection 
} 



// Getting all bloodpressures 

public List<BloodPressureResult> getAllBloodPressure() 
{ 
    List<BloodPressureResult> bloodP = new ArrayList<BloodPressureResult>(); 

    String selectQuery = "SELECT * FROM " + TABLE_BLOOD_PRESSURE; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    if(cursor.moveToFirst()) 
    { 
     do 
     { 
    BloodPressureResult bloodPressureResult = new BloodPressureResult(); 
    bloodPressureResult.setSys(Integer.parseInt(cursor.getString(0)));  
    bloodPressureResult.setDia(Integer.parseInt(cursor.getString(1)));     
    bloodPressureResult.setRate(Integer.parseInt(cursor.getString(2)));  

    bloodP.add(bloodPressureResult);  

     }while(cursor.moveToNext()); 
    } 
    cursor.close(); 
    return bloodP; 
    } 


    } 
+0

發表您的logcat .. –

+0

只好嘗試登錄,看看您是否可以從遊標的任何數據? – Hanon

+0

當你從db請求時檢查你的遊標值,它是NULL嗎? –

回答

0

我注意到的第一件事是你正在使用getString嘗試從遊標檢索整數。您應該使用getInt

其次,您沒有「_id」列是主索引,因此您返回的遊標不適用於任何標準適配器。他們期望並且需要一個「_id」列在光標中。

+0

感謝您的回答,巴拉克。現在我可以從我的數據庫中檢索數據。 :-) – BenjaminChu

0

您確定將值插入到表中嗎?

我認爲你應該在addBloodPressure函數中使用SQLiteDatabase db = this.getWritableDatabase();而不是SQLiteDatabase db = this.getReadableDatabase();

0

試試這個,我修改爲你

public List<BloodPressureResult> getAllBloodPressure(){ 




List<BloodPressureResult> bloodP = new ArrayList<BloodPressureResult>(); 


final String[] columns = new String[] { KEY_SYS, KEY_DIA, KEY_RATE }; 
SQLiteDatabase db = getReadableDatabase(); 
final Cursor cursor = db.query(TABLE_BLOOD_PRESSURE, columns, "", null, "", "", "", ""); 
if(cursor.getCount>0){ 

while (cursor.moveToNext()) { 
BloodPressureResult bloodPressureResult = new BloodPressureResult(); 
bloodPressureResult.setSys(cursor.getInt(cursor.getColumnIndex(KEY_SYS)));  
bloodPressureResult.setDia(cursor.getInt(cursor.getColumnIndex(KEY_DIA)));     
bloodPressureResult.setRate(cursor.getInt(cursor.getColumnIndex(KEY_RATE)));  
bloodP.add(bloodPressureResult); 
} 
} 
cursor.close(); 
db.close();}