2012-04-18 94 views
0

我遇到了一個小問題,與我目前的項目。我正在做一個android應用程序,它需要連接到SQLite數據庫來處理一些語句。我相信這些陳述等都很好,我唯一的問題是與數據庫的連接不成功。Android SQLite數據庫連接不成功

logcat的錯誤:

04-18 08:20:30.688: E/Database(304): sqlite3_open_v2("jdbc:sqlite:res/raw/randomdb.db", &handle, 1, NULL) failed 

所以到目前爲止我的代碼,用於連接到數據庫是這樣的:

String url = "jdbc:sqlite:res/raw/randomdb.db"; 
      SQLiteDatabase db; 
      db = SQLiteDatabase.openDatabase(url, null, SQLiteDatabase.OPEN_READONLY); 

正如你可以看到,我試圖存取權限位於數據庫在我的項目/ res/raw文件夾中。有沒有人看到錯誤?

!!!更新! * 我試圖用SQLiteOpenHelper的方式,但仍然鼓勵一個錯誤,我似乎無法解決。這是我的新代碼: *

public class DatabaseAdapter extends SQLiteOpenHelper { 
    private static String dbPath= "data/data/com.YourPackageName/applicationDb/"; 
    private static String dbName = "YourDBName"; 
    private SQLiteDatabase applicationDatabase; 
    private final Context applicationContext; 

    private boolean checkDataBase(){ 
     File dbFile = new File(dbPath + dbName); 
     return dbFile.exists(); 
    } 

    public void openDataBase() throws SQLException{ 
     String fullDbPath= dbPath + dbName; 
     applicationDatabase = SQLiteDatabase.openDatabase(fullDbPath,null,SQLiteDatabase.OPEN_READONLY); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
    } 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    } 
} 

我得到這個錯誤: 隱超構造SQLiteOpenHelper()是未定義默認構造函數。必須定義一個明確的構造函數 任何想法?會很好!

如果你想連接你與SQLite數據庫Android應用

回答

0

,那麼你需要擴展SQLiteOpenHelper

public class AbcClass extends SQLiteOpenHelper 

之後,你需要重寫這些方法: 的onCreateonUpgrade 和構造AbcClass的看起來像:

public AbcClass(Context context) { 
    super(context, DB_NAME, null, VERSION); //public static final String DB_NAME = "test.sqlite"; 
} 
0
public boolean databaseExist() 
    { 
     File dbFile = new File(DB_PATH + DB_NAME); 
     return dbFile.exists(); 
    } 

This is the solution... 

OR -----------------------

private boolean checkDataBase(){ 

    SQLiteDatabase checkDB = null; 

    try{ 
     String myPath = DB_PATH + DB_NAME; 
     checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 

    }catch(SQLiteException e){ 

     //database does't exist yet. 

    } 

    if(checkDB != null){ 

     checkDB.close(); 

    } 

    return checkDB != null ? true : false; 
} 
0

我想你指定的路徑不正確的,因此作爲一個提到的其他答案沒有找到數據庫。但是我從未使用openDatabase方法從raw文件夾中讀取,因此我不知道哪個是正確的路徑。

不過曾經有一段時間我已經把數據庫和我的應用程序一起發貨了。它位於assets文件夾中,一旦應用程序啓動,我將它複製到私有應用程序存儲器中(非常類似於使用SqliteOpenHelper創建的任何數據庫)。從那時起,我用通常的方式與SqliteOpenHelper訪問數據庫。

基本上,我跟着這個thread中提到的博客,因爲我的數據庫文件大於1MB,我使用了thread中描述的技術。希望將這兩者結合起來,您將使數據庫運行!

編輯順便說一句,你就錯了,openDatabase不接受URL,但路徑。