2016-06-09 2 views
0

таблицы (т.е. вакцин) структура:андроид SQLite - данные таблицы не могут быть обновлены

id- автоматическое приращение первичного ключа

dose1_date - строка

dose2_date - строка

DatabaseAccessor класс выглядит следующим образом. Методы initDB() и setVaccineDates вызывают из другой активности. Но база данных не обновляется. Однако зарегистрированное сообщение найдено в logcat. Класс DatabaseHelper здесь не показан.

public class DatabaseAccessor { 

    public static DataBaseHelper myDbHelper = null; 
    public static SQLiteDatabase rdb = null; 
    public static SQLiteDatabase wdb = null; 

    public static synchronized final void initDB(Context context) throws Exception { 
     if (myDbHelper == null) { 
      myDbHelper = new DataBaseHelper(context); 
      myDbHelper.openDataBase(); 
      rdb = myDbHelper.getReadableDatabase(); 
      wdb = myDbHelper.getWritableDatabase(); 
     } 
    } 



    public static void setVaccineDates(String birthDate) throws SQLException{ 


     try { 
      String[] selections = null; 
      String qry = null; 
      qry = "select * from vaccines order by id"; 

      Cursor cursor = wdb.rawQuery(qry, selections); 

      Log.d("update qry===== ", qry); 

      while (cursor.moveToNext()) { 
       int rowID = Integer.parseInt(cursor.getString(0)); 

       ContentValues values = new ContentValues(); 
       values.put("dose1_date","66666"); 
       values.put("dose2_date","7777"); 
       wdb.update("vaccines", values, "id=?", new String[] {String.valueOf(rowID)}); 

       //wdb.close(); 
      } 
      cursor.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 

     } 



    }// end of method setVaccineDates 

} 

Что делать?

Edit: Если я раскомментировать wdb.close() линию, я вижу в LogCat

'06 -09 04: 21: 05,387: W/System.err (4144): java.lang.IllegalStateException: попытка повторно открыть уже закрытый объект: SQLiteDatabase: /data/data/com.cloudsoft.vaccine/databases/vaccines2.db '

+0

10 Очевидно, что после закрытия вы пытаетесь обновить внутри цикла. – Bharatesh

+0

Знаете ли вы, что вы достигли цикла while? Ваша таблица заполнена? –

+0

@ DanielK, я сказал, что сообщение logcat видно –

ответ

0

Как новичок в андроиде, это была просто ошибка из-за незнания, что эта ситуация приняла место: после update операции Я попытался найти изменения в файле базы данных (т.е. файл с .db расширение, сидящее внутри assets папка в Eclipse) через sqlite browser. Но на самом деле приложение, работающее на устройстве (реальный или эмулятор), имеет свою собственную базу данных, которая создается из файла расширения .db внутри папки assets, а последующие операции с базой данных влияют только на собственную базу данных приложения, не касаясь базы данных внутри указанной в Eclipse. И есть способ увидеть собственную базу данных приложения в запущенном устройстве в «Проводнике» Eclipse (в режиме DDMS) с помощью Questoid SQlite Manager

Смежные вопросы