SqliteException: database disk image is malformed

233
09 декабря 2017, 05:21

Нужно загрузить бд под андроид. Во время загрузки выдает вот эту ошибку SqliteException: database disk image is malformed

Получаю путь к бд:

pathDB = System.IO.Path.Combine(Application.persistentDataPath, dbName);

Копирую её если нужно

if (!System.IO.File.Exists (pathDB) || (isRewrite && !isUseSourceDB)) {
           Debug.Log("Rewrite " + dbName);
        if (sourcePath.Contains ("://")) {
            // Android
            Debug.Log("Its android");
            WWW www = new WWW (sourcePath);
            // Wait for download to complete - not pretty at all but easy hack for now 
            // and it would not take long since the data is on the local device.
            while (!www.isDone) {;}
            if (String.IsNullOrEmpty(www.error)) {                  
                System.IO.File.WriteAllBytes(pathDB, www.bytes);
            } else {
                CanExQuery = false;                                     
            }   
        }
        else {
            // Mac, Windows, Iphone
            //validate the existens of the DB in the original folder (folder "streamingAssets")
            if (System.IO.File.Exists (sourcePath)) {
                //copy file - alle systems except Android
                System.IO.File.Copy (sourcePath, pathDB, true);
            } else {
                CanExQuery = false;
                Debug.Log ("ERROR: the file DB named " + dbName + " doesn't exist in the StreamingAssets Folder, please copy it there.");
            }   
        }       

Открываю

private void Open ()
{
    this.Open (pathDB); 
}
private void Open (string path)
{
    if (IsConnectionOpen) {
        throw new SqliteException ("There is already an open connection");
    }
    if (sqlite3_open (path, out _connection) != SQLITE_OK) {
        throw new SqliteException ("Could not open database file: " + path);
    }
    Debug.Log("path for connection"+ path);
    IsConnectionOpen = true;
}

Ошибка происходить в этом методе, она связана с sqlite3_step(stmHandle), но я не пойму что являеться причиной.

public void ExecuteNonQuery (string query)
{
    //Debug.Log(query);
    if (!CanExQuery) {
        Debug.Log ("ERROR: Can't execute the query, verify DB origin file");
        return;
    }
    this.Open ();
    if (!IsConnectionOpen) {
        throw new SqliteException ("SQLite database is not open.");
    }
    try
    {
        IntPtr stmHandle = Prepare(query);
        Debug.Log("sqlite3_step: " + sqlite3_step(stmHandle) + " SQLITE_DONE: " + SQLITE_DONE);
        if (sqlite3_step(stmHandle) != SQLITE_DONE) {
            IntPtr errorMsg = sqlite3_errmsg(_connection);
            throw new SqliteException(Marshal.PtrToStringAnsi(errorMsg) + " Could not execute SQL statement. " + query);
        }

        Debug.Log("NullException");
        Finalize(stmHandle);
    }
    catch(Exception e)
    {
        Debug.LogError(e);
    }
    this.Close ();
}
READ ALSO
Диск замонтированный как папка

Диск замонтированный как папка

В Windows можно замонтировать диск, как папкуНапример, когда все буквы под диски заняты

192
.NET Core 2.0 Encoding.GetEncoding

.NET Core 2.0 Encoding.GetEncoding

Всем приветСтолкнулся с проблемой: нужно отправлять сообщение на почтовый ящик в кодировке koi8-u(21866):

233
API Яндекс Деньги

API Яндекс Деньги

Всем приветСитуация такая: Пишу телеграм бота, который должен уметь принимать платежи - а именно - платежи с банковских карт

228
Как избавиться от дублирования кода при слушании подобных потоков?

Как избавиться от дублирования кода при слушании подобных потоков?

Я сделал приблизительную модель шаблона одностраничного приложения на RXНавигация состоит из кнопок двух видов

433