Sqlite для Windows Phone 8.1

Я установил расширение sqlite для Windows Phone 8.1 в Visual Studio 2013 (http://visualstudiogallery.msdn.microsoft.com/5d97faf6-39e3-4048-a0bc-adde2af75d1b)

Теперь я пытаюсь понять, как использовать его в приложении Windows Phone C++ XAML. Как это сделать? Все примеры, которые я нашел, относятся к С#. Они просят установить пакет sqlite3-net после установки расширения.

Я предполагаю, что можно использовать собственные API-интерфейсы C, но было бы неплохо иметь оболочку C++/CX.


person seggaeman    schedule 29.07.2014    source источник


Ответы (1)


Напишите свою оболочку.

Честно говоря, вам не нужна оболочка, просто откройте базу данных, запросите ее, обработайте результат, закройте базу данных. Вот и все.

Это мой фрагмент кода в качестве примера

void QuestionManager::LoadQuestion(int questionId)
{
    string dbPath = "my/path/question.sqlite";
    if(sqlite3_open(dbPath.c_str(),&pDB) == SQLITE_OK)
    {
        LOG("Open data base success");

        ostringstream ss;
        ss << "Select * from question1 where id=" << questionId;

        string sqlCmd = ss.str();
        sqlite3_stmt *stmt;
        if(sqlite3_prepare_v2(pDB, sqlCmd.c_str(), -1, &stmt, NULL) == SQLITE_OK)
        {
            while (sqlite3_step(stmt) == SQLITE_ROW)
            {
                Question q = Question();
                q.question = (const char*)sqlite3_column_text(stmt, 1);
                q.caseA = (const char*)sqlite3_column_text(stmt, 2);
                q.caseB = (const char*)sqlite3_column_text(stmt, 3);
                q.caseC = (const char*)sqlite3_column_text(stmt, 4);
                q.caseD = (const char*)sqlite3_column_text(stmt, 5);
                q.result = (const char*)sqlite3_column_text(stmt, 6);

                arrQuestion[i] = q;
            }
        }

        sqlite3_close(pDB);
    }
    else
    {
        LOG("cannot open DB %s", dbPath.c_str());
    }
}
person Hai Nguyen    schedule 29.07.2014
comment
Обертка не так бесполезна, как вы предлагаете. SQLite изначально использует UTF8, тогда как Platform::String^ использует широкие символы. Тем не менее, основная проблема заключается не в написании кода для запросов к базе данных, а в том, чтобы заставить его работать. Компиляция исходного кода SQLite вместе с проектом дает много ошибок. Во всяком случае, мне удалось это решить. Расширение WP8.1 SQLite поставляется с заголовком и .dll, которые можно добавить в качестве ссылки на проект. Теперь другой вопрос: как добавить существующую базу данных в проект во время компиляции? - person seggaeman; 29.07.2014
comment
Вы можете найти метод преобразования для преобразования Platform::String^ в последовательность символов UTF8 и наоборот (stackoverflow.com/questions/11746146/). Я использовал расширение для стабильной и удобной работы. По другому вопросу: добавьте его как другие активы. :) - person Hai Nguyen; 30.07.2014
comment
добавить его как другие активы - это снова только часть ответа, поскольку файл базы данных не будет доступен для записи. Не похоже, что вы на самом деле пробовали то, что предлагаете! В любом случае файл базы данных можно найти, если он добавлен в папку Assets. Затем его нужно скопировать в другое место. Подойдет любое из этих мест. Windows::Storage::ApplicationData::Current-›LocalFolder Windows::Storage::ApplicationData::Current-›LocalCacheFolder - person seggaeman; 20.08.2014