2012-04-18 12 views
0

私の現在のプロジェクトで少し問題が発生しました。私はいくつかのステートメントを処理するために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と一緒に行くつもりでしたが、私は解決できないようなエラーに気づきました。 暗黙スーパーコンストラクタ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) { 
    } 
} 

:ここに私の新しいコードです。明示的なコンストラクタを定義する必要があります アイデア?素晴らしいことだ!

答えて

0

あなたはSQLiteのデータベースにあなたのAndroidアプリケーションを接続する場合、あなたは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

私はあなたが指定したパスが正しいものではありませんので、1で述べたように考えます他の回答のうち、データベースが見つかりません。しかし、という方法を使用して、rawフォルダから読み取ることはありませんでした。そのため、正しいパスがわかりません。

しかし、私は一度に私のアプリケーションと共にデータベースを出荷しました。それはassetsフォルダにあり、アプリケーションが起動すると私はプライベートアプリケーションストレージにコピーしました。(SqliteOpenHelperで作成されたデータベースと同じように)それ以来、私はSqliteOpenHelperと通常の方法でデータベースにアクセスしました。

これは基本的にこのthreadに記載されているブログに続き、私のデータベースファイルが1MBを超えているため、このthreadで説明したテクニックを使用しました。うまくいけば、あなたはあなたのデータベースを稼働させるでしょう!

EDIT Btwあなたは間違っていますが、openDatabaseはURLを受け入れませんが、パスです。

関連する問題