2012-05-28 18 views
0

안녕하세요 Android 개발을 처음 사용합니다. 문제는 내가 성공적으로 테이블을 만들고 테이블에 데이터를 추가 할 수 있지만 데이터베이스에서 데이터를 검색 할 수 없으며 arraylist는 항상 null 값을 반환한다는 것입니다. 내가 알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

게시하여 로그 캣 .. –

+0

당신이 커서에서 데이터를 얻을 수 있는지 확인하기 위해 로그인을 시도했다? – Hanon

+0

db에서 요청할 때 커서 값을 확인하십시오. NULL입니까? –

답변

0

우선 당신이 시도하고 커서에서 정수를 검색 할 getString을 사용하는 것입니다 :-) 저를 도와주세요. getInt을 사용해야합니다.

둘째, 기본 색인 인 "_id"열이 없으므로 반환하는 커서는 표준 어댑터 중 하나에서 작동하지 않습니다. 커서에 "_id"열이 있어야합니다.

+0

답변 해 주셔서 감사합니다, 바락. 이제 데이터베이스에서 데이터를 검색 할 수 있습니다. :-) – BenjaminChu

0

값을 테이블에 삽입 하시겠습니까?

addBloodPressure 함수에서 SQLiteDatabase db = this.getReadableDatabase(); 대신 SQLiteDatabase db = this.getWritableDatabase();을 사용해야한다고 생각합니다.

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();} 
관련 문제