AndroidのSQLiteデータベースの入門知識

20650 ワード

SQLiteデータベース紹介:Android内蔵の小型、リレーショナル、テキスト型データベース.SQLiteOpenHelperによるデータベース操作.特徴:アプリケーション内の任意のクラスは、名前でデータベースにアクセスできます.ただし、アプリケーション以外ではアクセスできません.SQLiteOpenHelperクラスの紹介:役割:特定のデータベースへの参照を取得することによってデータベース(作成、追加、変更、削除)とバージョンの制御を管理する.
使用プロセス:SQLiteOpenHelperを継承するサブクラスを作成することによって、次のインスタンスコードのようなデータベースに対する操作を実行する方法が実装されます.
private static class DatabaseHelper extends SQLiteOpenHelper {

        DatabaseHelper(Context context) {
            super(context, CommDB.DATABASE_NAME, null, CommDB.DATABASE_VERSION);
            // CursorFactory   null,          
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
         //                       ,          ,
         //          ,        onCreate  
            ...
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //    newVersion>oldVersion
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
        //    OnUdgrade ,    ,    onCreate     ,
        //              ,               ,
        //                   。

            ...
        }
    }

パラメータ解読
パラメータ
意味
SQLiteOpenHelperの最初のコンストラクション関数パラメータ
コンテキスト環境
SQLiteOpenHelperの2番目のコンストラクション関数パラメータ
データベース名
SQLiteOpenHelperの3番目のコンストラクション関数パラメータ
カーソルファクトリ(オプション)
SQLiteOpenHelperの4番目のコンストラクション関数パラメータ
データベース・モデルのバージョン番号
実際の開発プロセスでは、データベースの管理とメンテナンスを向上させるために、SqliteOpenHelperから継承されたデータベース操作クラスをカプセル化し、このクラスをベースクラスとして必要なビジネスロジックをカプセル化し続けます.
一般的な方法の紹介
メソッド名
機能
onCreate()
データベースの作成
onUpgrate()
データベースのアップグレード
close()
開いているすべてのデータベース・オブジェクトを閉じる
getWriteableDatabase()
読み取り/書き込み可能なデータベースを作成または開く
getReadableDatabase()
読み取り可能なデータベースの作成または開く
notes:
(1)onCreate()メソッドは初めてデータベースを生成するときに呼び出され、onCreate()メソッドではデータベーステーブル構造を生成したり、使用する初期化データを追加したりすることができます.(2)onUpgrade()メソッドは、データベースのバージョンが変更されたときに呼び出されます.通常、ソフトウェアのアップグレードやテーブル構造の更新時にバージョン番号を変更する必要がありますが、データベースのバージョンはプログラマによって制御されます.データベースの元のバージョンが1であると仮定すると、元のデータベースのバージョンを2に設定し、onUpgrade()メソッドでテーブル構造の更新の論理操作を実現することができます.
SQLiteDatabaseクラスの紹介:役割:具体的な添削・変更操作を実行する
一般的な方法の紹介
メソッド名
機能
execSQL()
追加削除操作を行うことができ、クエリー操作を行うことができません(と操作)
rawQuery()
select文の実行に使用可能
query()
データベースのクエリー(読み込み)
insert()
データの挿入
delete()
データの削除
notes:
(1)1つのデータベースに複数のデータテーブルがあること
SQLite入門基礎
SQLiteOpenHelperを使用してデータベース・オブジェクトを取得します(1)getWriteableDatabase()とgetReadableDatabase()を使用してデータベース・オブジェクトの参照を取得します.データベースが存在しない場合、Androidシステムは自動的にデータベースを生成し、onCreate()メソッドを呼び出します.
キーコード
 mDbHelper = new DatabaseHelper(context);
        mDb = mDbHelper.getWritableDatabase();

安卓中SQLiteの添削変更操作
1.データ増加操作
(1).コンテナとしてContentValuesを利用し,Parcelableインタフェースを実現し,直列化可能であり,下層はHashMapのパッケージである.入力パラメータはKey(String)、Value(Object)でなければなりません.Stringはテーブル作成時のカラム名に対応します.
ContentValues values = new ContentValues();
initialValues.put(KEY_ID, id);
initialValues.put(KEY_PIC_URL, picUrl);

(2).SQLiteDatabaseクラスのinsertメソッドを使用してテーブル名TABLE_を指定します.NAMEは前のステップで自分で生成したvaluesに伝わります.その戻り値で操作が成功したかどうかを判断し、-1を返すと操作が失敗し、成功すると最新の挿入データの行番号を返す.
SQLiteDatabase mDb;
//       ,       
        mDb.beginTransaction(); //     
        try{
long createResult = mDb.insert(TABLE_NAME, null, values);
db.setTransactionSuccessful(); //         
} finally {
    db.endTransaction(); //     
}

notes:try...finally文ブロックは加算できますか?加算しませんか?
2.データ削除操作
(1)テーブル内のすべてのデータを削除し、delete()メソッドを使用し、最初のパラメータはデータテーブル名、2番目のパラメータは条件文、3番目のパラメータは条件パラメータである.2番目のパラメータが空の場合、すべてのロー・データが削除され、戻り値は削除操作の影響を受けるローの数です.
int deleteResult = mDb.delete(TABLE_NAME, null, null);

(2)フィールド名によるテーブルからのデータの削除
int isDelete;
String[] tName = new String[] {id};
isDelete = mDb.delete(TABLE_NAME, KEY_ID + "=?", tName);

3.データテーブル更新操作
ContentValueを使用してキー値ペアを格納します.update文の最初のパラメータはデータテーブル名で、2番目は更新する必要がある対応する列と値で、3番目のパラメータは条件文で、4番目のパラメータは条件パラメータです.
public void updatePicUrl(User user) {
        Logger.d("updatePicUrl");
        ContentValues values = new ContentValues();
        values.put("age", user.getPicUrl());
        db.update(TABLE_NAME, values, "id = ?",
               new String[] { user.getId(); });
}

4.クエリーデータ操作
ArrayListを用いてPOJOクラスのユーザデータを格納し、Cursorを用いて各行のデータを取得し、後続の操作でArrayListに格納する.
パラメータの解読:
public Cursor query(String table, String[] columns, String selection,
            String[] selectionArgs, String groupBy, String having,
            String orderBy)

パラメータ
さぎょう
table
データテーブル名
columns
列名の問合せ
selection
クエリー条件
selectionArgs
じょうけんパラメータ
groupBy
groupBy句の追加
having
having句の追加
orderBytable
orderBy句の追加
Notes:一般的に簡単な操作は前の4つのパラメータを記入すればいいです.
テーブル内のすべてのデータを問合せ、ArrayListに格納
public ArraryList queryAll() {
        ArrayList allUsersList = new ArrayList<>();
        Cursor mCursor = null;
        mCursor = mDb.query(TABLE_NAME, new String[] {KEY_ID,KEY_PIC_URL}, null, null, null, null, null);
        if (mCursor.moveToFirst()) {
            do {
                User user = new User();
                user.setId(mCursor.getString(mCursor.getColumnIndexOrThrow(KEY_ID)));
                user.setPicUrl(mCursor.getString(mCursor.getColumnIndexOrThrow(KEY_PIC_URL)));
                allUsersList.add(user);
            } while (mCursor.moveToNext());
        }
        if (mCursor != null && !mCursor.isClosed()) {
            mCursor.close();
        }
        return allUsersList;
 }

サンプルコードの使用
CommDB.java
public class CommDB {
    public static final String DATABASE_NAME = "MoveDatabase.db"; //     
    public static final int DATABASE_VERSION = 1;
    //    url  id  
    private static final String CREATE_TABLE_ImgRecords = "create table if not exists" +
            ImgRecordsDB.TABLE_NAME + "(" + ImgRecordsDB.KEY_ID +"integer," +
            ImgRecordsDB.KEY_PIC_URL +"varchar(200))";
    //       
    private static final String CREATE_TABLE_SearchRecords =
            "create table if not exists" + SearchRecordsDB.TABLE_NAME + "(" + SearchRecordsDB.KEY_ID +
                    "integer primary key autoincrement," + SearchRecordsDB.KEY_Content +"varchar(200))";
    private final Context context;
    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;

    public CommDB(Context ctx) {
        this.context = ctx;
        this.DBHelper = new DatabaseHelper(this.context);
    }

    private static class DatabaseHelper extends SQLiteOpenHelper {

        DatabaseHelper(Context context) {
           super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
                 db.execSQL(CREATE_TABLE_ImgRecords);//       
                 db.execSQL(CREATE_TABLE_SearchRecords);//       
        }

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

   public CommDB open() throws SQLException {
       this.db = this.DBHelper.getWritableDatabase();
       return this;
   }


    public void close() {
        this.DBHelper.close();
    }
}

ImgRecordsDB.java
public class ImgRecordsDB {
    public static final String KEY_ID = "id";
    public static final String KEY_PIC_URL = "picUrl";
    private DatabaseHelper mDbHelper;
    private SQLiteDatabase mDb;
    public static final String TABLE_NAME = "ImgRecords";
    private final Context context;

    private static class DatabaseHelper extends SQLiteOpenHelper {

        DatabaseHelper(Context context) {
            super(context, CommDB.DATABASE_NAME, null, CommDB.DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {

        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            Logger.d("Upgrading database from version " + oldVersion + " to " + newVersion +
                    ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
            onCreate(db);
        }
    }

    public ImgRecordsDB(Context ctx) {
        this.context= ctx;
    }

    public ImgRecordsDB open() throws SQLException {
        mDbHelper = new DatabaseHelper(context);
        mDb = mDbHelper.getWritableDatabase();
        return this;
    }

    public void close() {
        if (mDbHelper != null) {
            mDbHelper.close();
        }
    }

    //                    
    /**
     *         id     url 
     * @param id
     * @param picUrl
     * @return
     */
    public long createUser(String id,String picUrl) {
        long createResult = 0;
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_ID, id);
        initialValues.put(KEY_PIC_URL, picUrl);
        try {
            createResult = mDb.insert(TABLE_NAME, null, initialValues);
            Logger.d("the new row is " + createResult);
        } catch (Exception e) {
            //               
            Logger.d("delete all data failed!");
            e.printStackTrace();
        }
        return createResult;
    }

    /**
     *         
     * @return
     */
    public boolean deleteAllUsers() {
        int deleteResult = 0;
        try {
            deleteResult = mDb.delete(TABLE_NAME, null, null);
            Logger.d(deleteResult+"row has been deleted!");
        } catch (Exception e) {
            //               
            e.printStackTrace();
        }
        return deleteResult > 0;
    }

    /**
     *            
     * @param id
     * @return
     */
    public boolean deleteUserByID(String id) {
        int isDelete;
        String[] tName = new String[] {id};
        isDelete = mDb.delete(TABLE_NAME, KEY_ID + "=?", tName);
        Logger.d("isDelete:" + isDelete + "---" + "UserID = " + id);
        return isDelete > 0;
    }

    /**
     *          
     * @return
     */
    public ArrayList queryAll() {

        ArrayList allUsersList = new ArrayList<>();
        Cursor mCursor = null;
        mCursor = mDb.query(TABLE_NAME, new String[] {KEY_ID,KEY_PIC_URL}, null, null, null, null, null);
        if (mCursor.moveToFirst()) {
            do {
                User user = new User();
                user.setId(mCursor.getString(mCursor.getColumnIndexOrThrow(KEY_ID)));
                user.setPicUrl(mCursor.getString(mCursor.getColumnIndexOrThrow(KEY_PIC_URL)));
                allUsersList.add(user);
            } while (mCursor.moveToNext());
        }
        if (mCursor != null && !mCursor.isClosed()) {
            mCursor.close();
        }
        return allUsersList;
    }

}

まだ更新中ですので、ご了承ください