Импорт MySQL DB в Android SQLite DB - PullRequest
0 голосов
/ 30 июня 2011

Подскажите, пожалуйста, как импортировать внешнюю базу данных SQLite или MySQL в SQLite для Android или как использовать внешнюю базу данных в приложении для Android?

Ответы [ 3 ]

3 голосов
/ 30 июня 2011

Убедитесь, что внешняя база данных SQLite, которую вы хотите импортировать, использует типы данных INTEGER для первичного ключа, а не INT или какой-либо другой вариант INT. Некоторые разновидности SQLite от различных участников Консорциума SQLite одинаково относятся к первичным ключам INTEGER и INT, тогда как (флагманский) SQLite обрабатывает их по-разному.

См. Раздел 2.0 здесь: http://www.sqlite.org/datatypes.html

и смотрите раздел по RowId и первичному ключу здесь: http://www.sqlite.org/lang_createtable.html#rowid

Столбец PRIMARY KEY становится только целочисленный первичный ключ, если объявлен имя типа точно "INTEGER". Другой целочисленные имена типа, такие как "INT" или "BIGINT" или "SHORT INTEGER" или «НЕ ПОДПИСАННЫЙ ИНТЕГЕР» вызывает основной ключевой столбец, чтобы вести себя как обычный столбец таблицы с целочисленным сродством и уникальный индекс, не как псевдоним для rowid. [выделение добавлено]

РЕДАКТИРОВАТЬ: Если ваша внешняя база данных SQLite имеет целочисленные первичные ключи, определенные как INT или любой другой вариант INT, а не как "INTEGER", вы можете получить ошибочные результаты при присоединении к файлу базы данных из реализации члена консорциума. , Допустим, значение FK в дочерней таблице равно 110; объединение, которое обрабатывает целочисленное значение как псевдоним для rowid, будет искать родительскую таблицу, чтобы получить 110-ю физическую строку, которая может быть или не быть строкой со значением PK = 110, если в родительской таблице был определен PK как INT или BIGINT любой из других вариантов! В SQLite только INTEGER [дословно] PK обрабатывается как псевдоним для rowid, но некоторые реализации не следовали этому правилу и рассматривали все INT типы как псевдонимы для rowid. Таким образом, при подключении из одной из этих реализаций к внешнему файлу данных SQLite, который был создан с использованием флагманского SQLite, крайне важно использовать первичные ключи INTEGER (дословно), а не любые другие типы INT.

1 голос
/ 30 июня 2011

Посмотрите здесь , чтобы найти некоторые инструменты конвертера, которые могут преобразовать немой MySQL в базу данных SQLite.Затем вы можете импортировать базу данных в ваше приложение, как обычно.

Невозможно напрямую использовать базу данных MySQL.

0 голосов
/ 12 июля 2011

Я знаю, что это может быть дешевым способом, но я использовал службу push-сообщений (MQTT), чтобы взять копию моего файла дампа mysql и отправить сообщение на телефон, где я запускаю его через анализатор и вставляю строки в мойместный дб.Служба сообщений mqtt имеет предварительно скомпилированную библиотеку .jar, которую можно довольно легко использовать в приложении для Android.

Существует множество способов реализации mqtt на вашем веб-сервере (SAM-> php или то, что я написал для прослушивания на c ++, для пересылки сообщений [Использование библиотеки mqtt с открытым исходным кодом, называемой mosquitto]).Код для анализа данных - всего несколько строк, так как сообщение, которое я получаю в моем сервисе Android, - это просто байтовый массив.

Например, я преобразовываю байтовый массив в строку, токенизирую строку и затем вставляю ее в базу данных:

public void parseMysqlDump(byte[] thisPayload) {
    ContentResolver cr = this.getContentResolver();

    String mysqlDump = "";
    for(int i = 0; i < thisPayload.length; i++) {
        mysqlDump += (char) thisPayload[i];
    }
    String[] mysqlDumpNewLineTokens =  mysqlDump.split("\\n");
    //The first line is the table headers stuff so start with i=1 to get to the first
    //data line
    for(int i = 1; i < mysqlDumpNewLineTokens.length; i++) {
    String[] mysqlDumpSpaceTokens = mysqlDumpNewLineTokens[i].split("\\s");
    String dataTitle = mysqlDumpSpaceTokens[0];
    ContentValues cv = new ContentValues();
    cv.put(Vehicle_DataMetaData.DATA_VALUE, mysqlDumpSpaceTokens[1]);
    cr.insert(Vehicle_DataMetaData.CONTENT_URI, cv);
}

TL; DR: взять дамп mysql, отправитьэто как строка для телефона, проанализируйте строку в БД.

Если вы заинтересованы в материалах mqtt или хотите получить какие-либо разъяснения, просто прокомментируйте, и я вернусь к вам

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