2012-05-28 7 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

Вы уверены, что вы вставляете значения в таблицу?

Я думаю, вы должны использовать SQLiteDatabase db = this.getWritableDatabase(); вместо SQLiteDatabase db = this.getReadableDatabase(); в функции addBloodPressure.

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();}