按id更新行,cannote解析sqlite更新方法

时间:2015-07-09 19:02:59

标签: android database sql-update

我需要更新我的数据库的一行,但是我得到一个SQLiteDatabase更新方法未解决的错误。 我认为这是因为我必须创建的自定义类:

public class DBAccess {

public static String LOG_TAG = "DBAccess";

private SQLiteDatabase database;
private DBHelper dbHelper;


public DBAccess(Context context) {
    dbHelper = new DBHelper(context);
}

public void open() throws SQLException {
    database = dbHelper.getWritableDatabase();
}

public void close() {
    dbHelper.close();
}

public Integer saveVehicle (Vehicle v){
    Integer id = null;
    if(this.database.isOpen() && !this.database.isReadOnly()){
        String queryInsert = DBHelper.QueryAccessoAlDato.INSERT_VEHICLE;

        try{


            this.database.execSQL(queryInsert, new Object[]{v.getManufacturer(), v.getModel(), v.getPlate(),
                    v.getKmAmount(), v.getPrezzoGiorno(), v.getPrezzoSettimana(), v.getPrezzoMese(), v.getFuel(),
                    v.getGruppoMacchina()});
        }catch (SQLException e){
            Log.e(LOG_TAG, "Si è verificato un errore in inserimento " + e.getMessage());
            e.printStackTrace();
            return null;
        }

然后这是主要活动的OnClick方法:

@Override
public void onClick(View v) {

    Log.d(LOG_TAG, "Marca: "+this.etManufacturer.getText());
    Log.d(LOG_TAG, "Modello: "+this.etModel.getText());
    Log.d(LOG_TAG, "Targa: "+this.etPlate.getText());
    Log.d(LOG_TAG, "Kilometraggio: "+this.etKmAmount.getText());
    Log.d(LOG_TAG, "PrezzoGiorno: "+this.etPrezzoGiorno.getText());
    Log.d(LOG_TAG, "PrezzoSettimana: "+this.etPrezzoSettimana.getText());
    Log.d(LOG_TAG, "PrezzoMese: "+this.etPrezzoMese.getText());
    Log.d(LOG_TAG, "Fuel: "+this.etFuel.getText());
    Log.d(LOG_TAG, "Gruppo Macchina: "+this.etGruppoMacchina.getText());




    if(!(this.etManufacturer.getText().length() == 0)  &&
            !(this.etModel.getText().length() == 0) &&
            !(this.etPlate.getText().length() == 0) &&
            !(this.etKmAmount.getText().length() == 0) &&
            !(this.etPrezzoGiorno.getText().length() == 0) &&
            !(this.etPrezzoSettimana.getText().length() == 0) &&
            !(this.etPrezzoMese.getText().length() == 0) &&
            !(this.etFuel.getText().length() == 0) &&
            !(this.etGruppoMacchina.getText().length() == 0)
            ){

        Vehicle myVehicle = null;

        String manufacturer = this.etManufacturer.getText().toString();
        String model        = this.etModel.getText().toString();
        String plate        = this.etPlate.getText().toString();
        long KmAmount       = Long.parseLong(this.etKmAmount.getText().toString());
        int prezzoGiorno    = Integer.parseInt(etPrezzoGiorno.getText().toString());
        int prezzoSettimana = Integer.parseInt(etPrezzoSettimana.getText().toString());
        int prezzoMese      = Integer.parseInt(etPrezzoMese.getText().toString());
        String fuel         = this.etFuel.getText().toString();
        String gruppoMacchina = this.etGruppoMacchina.getText().toString();





        myVehicle = new Vehicle (manufacturer,  model,  plate, KmAmount, prezzoGiorno,
                prezzoSettimana, prezzoMese,fuel, gruppoMacchina);
        Log.d(LOG_TAG, "Hai aggiunto " + myVehicle + "con id" + vehicleID);




        DBAccess dba = new DBAccess(this.getApplicationContext()); 
        dba.open();
        Log.d(LOG_TAG, "Avvio lettura da db");

        if (this.getIntent().hasExtra(Const.ID_VEHICLE)) {

        //http://stackoverflow.com/questions/9798473/sqlite-in-android-how-to-update-a-specific-row
        ContentValues values= new ContentValues();
        values.put(DBHelper.VEHICLE_MANUFACTORER_COLUMN, manufacturer);
        values.put(DBHelper.VEHICLE_MODEL_COLUMN, model);
        //values.put(DBHelper.KEY_PEDLOCATION, ped_location);
        // values.put(DBHelper.KEY_PEDEMAIL, ped_emailid);
        // etc etc
        dba.update(DBHelper.TABLE_VEHICLE, values, DBHelper.VEHICLE_ID_COLUMN + "=" + vehicleID, null);
        finish();

        }else{

        dba.saveVehicle(myVehicle); 
        Log.d(LOG_TAG, "Ho salvato" + myVehicle);
        dba.close(); 


        finish();

所以我得到了错误:

dba.update(DBHelper.TABLE_VEHICLE, values, DBHelper.VEHICLE_ID_COLUMN + "=" + vehicleID, null);

我该如何解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:0)

首先,您的DBAccess类应该扩展SQLiteOpenHelper类。

Update方法声明如下,最后一个参数应该是String数组,

public int update (String table, ContentValues values, String whereClause, String[] whereArgs)

将您的代码更改为如下所示:

dba.update(DBHelper.TABLE_VEHICLE, values, DBHelper.VEHICLE_ID_COLUMN + "=?", new String[]{String.valueOf(vehicleID));