Androidアプリケーションで既存のデータベースを使用する方法

ムハンマドウマル:

SQLiteデータベースはすでに作成しています。このデータベースファイルをAndroidプロジェクトで使用したい。このデータベースをアプリケーションにバンドルしたいと思います。

新しいデータベースを作成する代わりに、アプリケーションはどのようにしてこのデータベースにアクセスし、それをデータベースとして使用できますか?

ヤクブ・アフマド:

注:このコードを試す前に、以下のコードでこの行を見つけてください。

private static String DB_NAME ="YourDbName"; // Database name

ここでのDB_NAMEはデータベースの名前です。データベースのコピーがassetsフォルダにあると想定されているため、たとえば、データベース名がordersDBの場合、DB_NAMEの値はordersDBとなり、

private static String DB_NAME ="ordersDB";

データベースをassetsフォルダーに保存し、以下に従ってください

DataHelperクラス:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DataBaseHelper extends SQLiteOpenHelper {

    private static String TAG = "DataBaseHelper"; // Tag just for the LogCat window
    private static String DB_NAME ="YourDbName"; // Database name
    private static int DB_VERSION = 1; // Database version
    private final File DB_FILE;
    private SQLiteDatabase mDataBase;
    private final Context mContext;

    public DataBaseHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
        DB_FILE = context.getDatabasePath(DB_NAME);
        this.mContext = context;
    }

    public void createDataBase() throws IOException {
        // If the database does not exist, copy it from the assets.
        boolean mDataBaseExist = checkDataBase();
        if(!mDataBaseExist) {
            this.getReadableDatabase();
            this.close();
            try {
                // Copy the database from assests
                copyDataBase();
                Log.e(TAG, "createDatabase database created");
            } catch (IOException mIOException) {
                throw new Error("ErrorCopyingDataBase");
            }
        }
    }

    // Check that the database file exists in databases folder
    private boolean checkDataBase() {
        return DB_FILE.exists();
    }

    // Copy the database from assets
    private void copyDataBase() throws IOException {
        InputStream mInput = mContext.getAssets().open(DB_NAME);
        OutputStream mOutput = new FileOutputStream(DB_FILE);
        byte[] mBuffer = new byte[1024];
        int mLength;
        while ((mLength = mInput.read(mBuffer)) > 0) {
            mOutput.write(mBuffer, 0, mLength);
        }
        mOutput.flush();
        mOutput.close();
        mInput.close();
    }

    // Open the database, so we can query it
    public boolean openDataBase() throws SQLException {
        // Log.v("DB_PATH", DB_FILE.getAbsolutePath());
        mDataBase = SQLiteDatabase.openDatabase(DB_FILE, null, SQLiteDatabase.CREATE_IF_NECESSARY);
        // mDataBase = SQLiteDatabase.openDatabase(DB_FILE, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
        return mDataBase != null;
    }

    @Override
    public synchronized void close() {
        if(mDataBase != null) {
            mDataBase.close();
        }
        super.close();
    }

}

次のようなDataAdapterクラスを記述します。

import java.io.IOException;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

public class TestAdapter {

    protected static final String TAG = "DataAdapter";

    private final Context mContext;
    private SQLiteDatabase mDb;
    private DataBaseHelper mDbHelper;

    public TestAdapter(Context context) {
        this.mContext = context;
        mDbHelper = new DataBaseHelper(mContext);
    }

    public TestAdapter createDatabase() throws SQLException {
        try {
            mDbHelper.createDataBase();
        } catch (IOException mIOException) {
            Log.e(TAG, mIOException.toString() + "  UnableToCreateDatabase");
            throw new Error("UnableToCreateDatabase");
        }
        return this;
    }

    public TestAdapter open() throws SQLException {
        try {
            mDbHelper.openDataBase();
            mDbHelper.close();
            mDb = mDbHelper.getReadableDatabase();
        } catch (SQLException mSQLException) {
            Log.e(TAG, "open >>"+ mSQLException.toString());
            throw mSQLException;
        }
        return this;
    }

    public void close() {
        mDbHelper.close();
    }

     public Cursor getTestData() {
         try {
             String sql ="SELECT * FROM myTable";
             Cursor mCur = mDb.rawQuery(sql, null);
             if (mCur != null) {
                mCur.moveToNext();
             }
             return mCur;
         } catch (SQLException mSQLException) {
             Log.e(TAG, "getTestData >>"+ mSQLException.toString());
             throw mSQLException;
         }
     }
}

これで、次のように使用できます。

TestAdapter mDbHelper = new TestAdapter(urContext);
mDbHelper.createDatabase();
mDbHelper.open();

Cursor testdata = mDbHelper.getTestData();

mDbHelper.close();

編集:JDxに感謝

以下のためのアンドロイド4.1(ジェリービーン)、変更:

DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";

に:

DB_PATH = context.getApplicationInfo().dataDir + "/databases/";

DataHelperクラスでは、このコードはJelly Bean 4.2マルチユーザーで動作します。

編集:ハードコードされたパスを使用する代わりに、

DB_PATH = context.getDatabasePath(DB_NAME).getAbsolutePath();

これにより、データベースファイルへの完全なパスが得られ、すべてのAndroidバージョンで動作します

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

共有データベースで複数のSpring-Dataアプリケーションを使用する方法

分類Dev

Androidアプリケーションの既存のsqliteデータベースを置き換える

分類Dev

Railsアプリケーションに2つのデータベースサーバーを使用する方法

分類Dev

Androidアプリケーションでデータベースを出荷する方法

分類Dev

ASP.NETMVCアプリケーションの1つのソリューションの下で別のプロジェクトで既存のSQLデータベースを使用する方法

分類Dev

ASP.NETMVCアプリケーションの1つのソリューションの下で別のプロジェクトで既存のSQLデータベースを使用する方法

分類Dev

既存のデータを削除せずにベスパアプリケーションを更新する

分類Dev

YesodアプリケーションのGHCiでデータベースクエリを実行する方法

分類Dev

AndroidアプリケーションからFirebaseデータベースにデータを追加する方法

分類Dev

Azure上の既存のデータベースを使用してASPMVCアプリケーションをデプロイする

分類Dev

Androidアプリケーションにデータベースを追加する

分類Dev

AndroidアプリケーションでMySQLデータベースにアクセスする方法は?

分類Dev

既存のアプリケーションでgitcloneを使用する

分類Dev

既存のデータベースの周りにフラスコアプリケーションを構築する方法は?

分類Dev

既存のAndroidアプリケーションでphonegap機能を使用する

分類Dev

既存のExpressアプリケーションでElectronを使用する方法

分類Dev

FlaskWebアプリで既存のPostGISデータベースを使用する方法

分類Dev

MicrosoftAccessデータベースを使用するアプリケーションを配布する方法

分類Dev

Androidアプリケーションで単一のデータベースに2つのテーブルを作成する方法は?

分類Dev

Androidアプリケーションに使用するデータベースはどれですか?

分類Dev

私のAndroidアプリケーションからデータベースをプルする適切な方法は何ですか?

分類Dev

SpringBootアプリケーションでリモートデータベース接続用のデータソースを構成する方法

分類Dev

Androidアプリケーションのデータベース

分類Dev

ClusterpointデータベースをAndroidアプリケーションに接続する方法

分類Dev

EntityFrameworkを使用してMVCアプリケーションから既存のAzureデータベースに接続する

分類Dev

SpringBootアプリケーションのデータベースパスワードにAzureKeyVaultを使用する

分類Dev

レールを使用して、あるアプリケーションデータベースの列を別のアプリケーションデータベースの列に更新する方法

分類Dev

複数のデータベースを使用して単一のアプリケーションを作成する

分類Dev

イオン角度アプリケーションでngrxでイオンストレージ(ローカルデータベース)を使用する方法

Related 関連記事

  1. 1

    共有データベースで複数のSpring-Dataアプリケーションを使用する方法

  2. 2

    Androidアプリケーションの既存のsqliteデータベースを置き換える

  3. 3

    Railsアプリケーションに2つのデータベースサーバーを使用する方法

  4. 4

    Androidアプリケーションでデータベースを出荷する方法

  5. 5

    ASP.NETMVCアプリケーションの1つのソリューションの下で別のプロジェクトで既存のSQLデータベースを使用する方法

  6. 6

    ASP.NETMVCアプリケーションの1つのソリューションの下で別のプロジェクトで既存のSQLデータベースを使用する方法

  7. 7

    既存のデータを削除せずにベスパアプリケーションを更新する

  8. 8

    YesodアプリケーションのGHCiでデータベースクエリを実行する方法

  9. 9

    AndroidアプリケーションからFirebaseデータベースにデータを追加する方法

  10. 10

    Azure上の既存のデータベースを使用してASPMVCアプリケーションをデプロイする

  11. 11

    Androidアプリケーションにデータベースを追加する

  12. 12

    AndroidアプリケーションでMySQLデータベースにアクセスする方法は?

  13. 13

    既存のアプリケーションでgitcloneを使用する

  14. 14

    既存のデータベースの周りにフラスコアプリケーションを構築する方法は?

  15. 15

    既存のAndroidアプリケーションでphonegap機能を使用する

  16. 16

    既存のExpressアプリケーションでElectronを使用する方法

  17. 17

    FlaskWebアプリで既存のPostGISデータベースを使用する方法

  18. 18

    MicrosoftAccessデータベースを使用するアプリケーションを配布する方法

  19. 19

    Androidアプリケーションで単一のデータベースに2つのテーブルを作成する方法は?

  20. 20

    Androidアプリケーションに使用するデータベースはどれですか?

  21. 21

    私のAndroidアプリケーションからデータベースをプルする適切な方法は何ですか?

  22. 22

    SpringBootアプリケーションでリモートデータベース接続用のデータソースを構成する方法

  23. 23

    Androidアプリケーションのデータベース

  24. 24

    ClusterpointデータベースをAndroidアプリケーションに接続する方法

  25. 25

    EntityFrameworkを使用してMVCアプリケーションから既存のAzureデータベースに接続する

  26. 26

    SpringBootアプリケーションのデータベースパスワードにAzureKeyVaultを使用する

  27. 27

    レールを使用して、あるアプリケーションデータベースの列を別のアプリケーションデータベースの列に更新する方法

  28. 28

    複数のデータベースを使用して単一のアプリケーションを作成する

  29. 29

    イオン角度アプリケーションでngrxでイオンストレージ(ローカルデータベース)を使用する方法

ホットタグ

アーカイブ