Доступ к внешнему файлу SQLite, Android - PullRequest
2 голосов
/ 13 сентября 2011

Я новичок в разработке Android, поэтому, пожалуйста, потерпите меня.У меня вопрос, у меня есть внешний файл SQLite, к которому я хочу получить доступ через Android, что мы обычно делаем в iPhone или Windows, мы просто добавляем файл SQlite в качестве ресурса и получаем к нему доступ, но я не могу сделать то же самое.Я следовал приведенной здесь инструкции Ссылка , но выдает ошибку " невозможно открыть файл базы данных ".

Отредактировано:

09-14 23:31:59.008: INFO/Database(335): sqlite returned: error code = 14, msg = cannot open file at source line 25467
09-14 23:31:59.008: ERROR/Database(335): sqlite3_open_v2("/data/data/com.mobile.socket.server/databases/Database/DictionaryDb.sqlite", &handle, 2, NULL) failed

Мой класс DbHelper:

package com.dbhandler;

import android.content.ContentValues;
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteStatement;

public class DbHelper extends SQLiteOpenHelper 
{
    //The Android's default system path of your application database.
    private String DB_PATH = "";//"/data/data/com.mobile.socket.server/databases/";

    private static String DB_NAME = "DictionaryDb.db";

    private SQLiteStatement insertStmt;

    private  SQLiteDatabase myDataBase; 

    /**
     * Constructor
     * Takes and keeps a reference of the passed context in order to access to the application assets and resources.
     * @param context
     */
    public DbHelper(Context context) 
    { 
        super(context, DB_NAME, null, 1);   
        //CreateDatabase(); 
    }   
    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        myDataBase = db;
    }

    private void CreateDatabase()
    {       
        try
        {
            String myPath = DB_PATH + DB_NAME;    
            myDataBase = SQLiteDatabase.openOrCreateDatabase(myPath, null);
            final String CREATE_TABLE_WORDS = "CREATE TABLE WordsTable (WordId INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL  UNIQUE , Word TEXT NOT NULL )";
            final String CREATE_TABLE_MEANINGS = "CREATE TABLE MeaningTable (MeaningId INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL , WordId INTEGER NOT NULL , Meaning TEXT NOT NULL )";
            myDataBase.execSQL(CREATE_TABLE_WORDS);
            myDataBase.execSQL(CREATE_TABLE_MEANINGS);
        }
        catch (Exception e) 
        {
            e.fillInStackTrace();
        }
    }

    public boolean AddNewWord(String word)
    {
        CreateDatabase();
        String myPath = DB_PATH + DB_NAME;      
        //ContentValues newRecord = new ContentValues();
        boolean RetVal = false;
        try
        {
            final String INSERT = "Insert into WordsTable(Word)  Values('"+word+"')";
            myDataBase = myDataBase.openDatabase(DB_NAME, null,SQLiteDatabase.OPEN_READWRITE);
            insertStmt = myDataBase.compileStatement(INSERT);
        //  myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
            //newRecord.put("Wordstable", word);
            //long newWordid = myDataBase.insert("Wordstable", null, newRecord);
        }
        catch (SQLException  e) 
        {
            e.fillInStackTrace();
        }
        return RetVal;
    }
    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
        // TODO Auto-generated method stub

    }

}

1 Ответ

1 голос
/ 15 сентября 2011

Я смог сам в этом разобраться, функция OnCreate SqLiteHelper не вызывалась, поэтому в конструкторе классов, который я назвал this.getWritableDatabase() эта принудительная функция "OnCreate", которая создала мой объект базы данных, я смог выполнить свою работу.

...