0

現在のプロジェクトで少し問題が発生しました。いくつかのステートメントを処理するために SQLite データベースに接続する必要がある Android アプリケーションを実行しています。ステートメントなどは問題ないと思いますが、唯一の問題は、データベースへの接続がうまくいかないことです。

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);

ご覧のとおり、project/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) { 
    }
}

次のエラーが表示されます: Implicit super constructor SQLiteOpenHelper() is undefined for default constructor. 明示的なコンストラクターを定義する必要があり ます 素晴らしいことだ!

4

3 に答える 3

0

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

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

基本的には、このスレッドで言及されているブログに従いました。データベース ファイルが 1MB を超えていたため、このスレッドで説明されている手法を使用しました。うまくいけば、これら 2 つを組み合わせることで、データベースを稼働させることができます!

EDIT Btwあなたは間違ってopenDatabaseいます.urlではなくパスを受け入れます.

于 2012-04-18T09:18:39.510 に答える
0

Android アプリケーションを SQLite データベースに接続する場合は、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";
}
于 2012-04-18T08:53:22.093 に答える
0
    public boolean databaseExist()
    {
        File dbFile = new File(DB_PATH + DB_NAME);
        return dbFile.exists();
    }

This is the solution...

また - - - - - - - - - - - -

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;
}
于 2012-04-18T08:53:27.240 に答える