Ошибка SQLite при очистке всех строк в таблице? - PullRequest
0 голосов
/ 17 февраля 2012
public class SQLiteTestActivity extends SQLiteOpenHelper {

private static final int DATABASE_VERSION = 2;
private static final String DATABASE_NAME = "MP_DB.db";
private static final String MP_TABLE_NAME = "MPDetails";

SQLiteTestActivity (Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}// end of 

@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
    db.execSQL(" CREATE TABLE " + MP_TABLE_NAME + " ( " +
            BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            " name TEXT, " +
            " lat REAL, "+
            " lng REAL,"+
            " roll REAL,"+
            " pitch REAL,"+
            " yaw REAL,"+
            " path TEXT"+
            ");" );
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // TODO Auto-generated method stub

}


public String getMP_Name(long id) {
    SQLiteDatabase db = this.getReadableDatabase();
    SQLiteCursor c = (SQLiteCursor) db.rawQuery("SELECT name FROM MP_Data WHERE "+
                                                BaseColumns._ID+" = "+
                                                Long.toString(id), null);
    c.moveToFirst();
    String r = c.getString(0);
    return r;       
}

public Double getMP_Lat(long id) {
    SQLiteDatabase db = this.getReadableDatabase();
    SQLiteCursor c = (SQLiteCursor) db.rawQuery("SELECT lat FROM MP_Data WHERE "+
                                                BaseColumns._ID+" = "+
                                                Long.toString(id), null);
    c.moveToFirst();
    Double r = c.getDouble(0);
    return r;       
}

public int getRowsCounter() {
    SQLiteDatabase db = this.getReadableDatabase();
    SQLiteCursor c = (SQLiteCursor) db.rawQuery("SELECT COUNT (*) FROM MPDetails ", null);
    c.moveToFirst();
    int r = c.getCount();
    return r;       
}

public void deleteMP(long id) {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(MP_TABLE_NAME, BaseColumns._ID+"="+Long.toString(id),null);   
}

public void deleteALLMP() {
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(MP_TABLE_NAME,null, null);    
}

}

OnClickListener save_btnListener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

        db =  mphelper.getWritableDatabase();
        cv = new ContentValues();

        String str1 = et01.getText().toString();
        String str2 = et02.getText().toString();

        if( (("").equals(str1) ||("").equals(str2))) {
            Toast.makeText(getBaseContext(), "both or either fields are empty", Toast.LENGTH_SHORT).show();
        } else{

        cv.put("name", str1);
        cv.put("lat", Double.valueOf(str2));


        long newID = db.insert("MPDetails", null, cv);
        count = mphelper.getRowsCounter();

        if (newID != -1){
            Toast.makeText(getBaseContext(),
                          "data saved ", 
                           Toast.LENGTH_SHORT).show();              
        }// end if
        }txt04.setText(String.valueOf(count));      
    }
};

OnClickListener clear_btnListener = new OnClickListener () {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        txt04 = (TextView) findViewById(R.id.txt04);
        mphelper.deleteALLMP();
        count = mphelper.getRowsCounter();
        txt04.setText(String.valueOf(count));
    }
};

1-Когда я очищаю БД с помощью «clear_btnListener» и нажимаю «Сохранить»save_btnListener "приложение аварийно завершает работу, несмотря на то, что я написал оператор if для проверки, где должны быть сохранены поля, пустые или нет.

2 - когда я очищаю БД и отображаю количество строк в таблице, я ожидаю получить нольно на самом деле я получаю 1 ???

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Вы должны удалить существующий MP_DB.db на вашем эмуляторе / телефоне.и воссоздайте базу данных, изменив в SQLiteTestActivity следующее:

private static final String MP_TABLE_NAME = "MPDetails";

на

private static final String MP_TABLE_NAME = "MP_Data";   

и в SQLSaveData:

long newID = db.insert("MPDetails", null, cv);

на

long newID = db.insert("MP_Data", null, cv);

и установите следующее

et02.setInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_FLAG_DECIMAL|InputType.TYPE_NUMBER_FLAG_SIGNED);

, в противном случае вы получите NumberFormatException


Приветствия

0 голосов
/ 17 февраля 2012

Насколько я могу сказать ... все вещи, реализованные в sqlite, лучше сделайте это в SqliteActivity, сделайте объект этого класса и используйте его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...