Как управлять одной и той же базой данных из разных классов?(Android / SQLite) - PullRequest
0 голосов
/ 15 декабря 2011

В моем приложении для Android у меня был один класс, выполняющий следующие функции:
сохранение данных из источника XML в базу данных;
загрузка данныхиз базы данных;
перезапись в базу данных из источника xml, если данные были старше 24 часов;
, что все работало нормально.

Я сейчас пытаюсь записать новую таблицу в ту же базу данных из другого класса.
Поэтому я следовал тем же процедурам / настройкам, что и в первом классе, и теперь программа падает (ошибка принудительного закрытия) икошка журнала android выдает следующие ошибки:
Ошибка SQL: msg = таблица "имя таблицы" не существует
ошибка вставки (запроса) в таблицу "имя таблицы" (эта ошибка повторяется при каждой попытке вставки)

Проблема в том, что «имя таблицы», которое она мне дает (говорит, что она не существует), является таблицей из первого класса, которая работала нормальнодо.

Вот соответствующий код:

public class CurrencyConverter {
public static String XML_SOURCE = "http://rss.timegenie.com/forex.gz";
public static long LAST_UPDATE=0;
private static SQLiteHelper.DatabaseAdapter dbAdapter;
private final static String TBL_NAME = "tbl_currency";
private final static String KEY_CODE = "code";
private final static String KEY_DESC = "description";
private final static String KEY_RATE = "rate";

private final static void createOrOpenDB(Context context) {
    SQLiteHelper dbHelper = new SQLiteHelper();
    TableObjectMaker tableObjs = dbHelper.new TableObjectMaker();
    tableObjs.addTable(TBL_NAME, new String[] {
             "_id integer primary key autoincrement",
             KEY_CODE + " text not null",
             KEY_DESC + " text not null",
             KEY_RATE + " real not null"
             });
    dbAdapter = dbHelper.new DatabaseAdapter(context);
    dbAdapter.open(tableObjs, "local_data", 1);
}
private final static void writeToDB(NodeList nodes) {
    if (nodes==null) return;
    List<ContentValues> content = SQLiteHelper.getContentValues(nodes,
            new String[] {KEY_CODE,KEY_DESC,KEY_RATE});
    for (ContentValues c:content) {
        dbAdapter.insertRowInTable(TBL_NAME, c);
    }
}
private final static void closeDB() {
    dbAdapter.close();
}
public static void updateDB(Context context) {
    Document xmlDocument = GZip.getResourceAsXML(XML_SOURCE,true);
    NodeList nodes = xmlDocument.getElementsByTagName("data");
    createOrOpenDB(context);
    writeToDB(nodes);
    closeDB();
    LAST_UPDATE = Calendar.getInstance().getTimeInMillis();
}
...
}  

другой класс имеет идентичные методы доступа к базе данных / записи, как описано выше, за исключением своего собственного имени таблицы и имен полей, и он использует то же имя "local_data" для имени базы данных.Как я могу заставить оба класса читать и записывать в свою таблицу в одной базе данных?

1 Ответ

0 голосов
/ 15 декабря 2011

Переместить весь доступ к базе данных в ContentProvider . Каждый класс может затем взаимодействовать с ContentProvider, который затем взаимодействует с базой данных.

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