2015-07-09 4 views
0

Мне нужно обновить строку моей базы данных, но я получаю сообщение об ошибке, когда метод обновления SQLiteDatabase не разрешен. Я думаю, это из-за пользовательский класс мне пришлось создать:update row by id, cannote resolve sqlite update method

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

Как это разрешить? Спасибо!

+0

Пожалуйста, пост полный журнал – Psypher

+0

я могу Не публикуйте журнал, потому что я все еще не могу запустить приложение. Я получаю слово «обновление», отмеченное красным. – ciuschifranco

ответ

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)); 
+0

Я использовал ваш код, но обновляющее слово reamin застряло в красном. Я думаю, что это не проблема с параметрами. Я думаю, проблема в том, что update metthod не может быть найден в методе DBAccess – ciuschifranco

+0

K только что увидел это сейчас ... В вашем классе DBAccess должен быть расширен SQLiteOpenHelper' – Psypher