AndroidのSQLiteデータベースの入門知識
20650 ワード
SQLiteデータベース紹介:Android内蔵の小型、リレーショナル、テキスト型データベース.SQLiteOpenHelperによるデータベース操作.特徴:アプリケーション内の任意のクラスは、名前でデータベースにアクセスできます.ただし、アプリケーション以外ではアクセスできません.SQLiteOpenHelperクラスの紹介:役割:特定のデータベースへの参照を取得することによってデータベース(作成、追加、変更、削除)とバージョンの制御を管理する.
使用プロセス:SQLiteOpenHelperを継承するサブクラスを作成することによって、次のインスタンスコードのようなデータベースに対する操作を実行する方法が実装されます.
パラメータ解読
パラメータ
意味
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()メソッドを呼び出します.
キーコード
安卓中SQLiteの添削変更操作
1.データ増加操作
(1).コンテナとしてContentValuesを利用し,Parcelableインタフェースを実現し,直列化可能であり,下層はHashMapのパッケージである.入力パラメータはKey(String)、Value(Object)でなければなりません.Stringはテーブル作成時のカラム名に対応します.
(2).SQLiteDatabaseクラスのinsertメソッドを使用してテーブル名TABLE_を指定します.NAMEは前のステップで自分で生成したvaluesに伝わります.その戻り値で操作が成功したかどうかを判断し、-1を返すと操作が失敗し、成功すると最新の挿入データの行番号を返す.
notes:try...finally文ブロックは加算できますか?加算しませんか?
2.データ削除操作
(1)テーブル内のすべてのデータを削除し、delete()メソッドを使用し、最初のパラメータはデータテーブル名、2番目のパラメータは条件文、3番目のパラメータは条件パラメータである.2番目のパラメータが空の場合、すべてのロー・データが削除され、戻り値は削除操作の影響を受けるローの数です.
(2)フィールド名によるテーブルからのデータの削除
3.データテーブル更新操作
ContentValueを使用してキー値ペアを格納します.update文の最初のパラメータはデータテーブル名で、2番目は更新する必要がある対応する列と値で、3番目のパラメータは条件文で、4番目のパラメータは条件パラメータです.
4.クエリーデータ操作
ArrayListを用いてPOJOクラスのユーザデータを格納し、Cursorを用いて各行のデータを取得し、後続の操作でArrayListに格納する.
パラメータの解読:
パラメータ
さぎょう
table
データテーブル名
columns
列名の問合せ
selection
クエリー条件
selectionArgs
じょうけんパラメータ
groupBy
groupBy句の追加
having
having句の追加
orderBytable
orderBy句の追加
Notes:一般的に簡単な操作は前の4つのパラメータを記入すればいいです.
テーブル内のすべてのデータを問合せ、ArrayListに格納
サンプルコードの使用
CommDB.java
ImgRecordsDB.java
まだ更新中ですので、ご了承ください
使用プロセス: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;
}
}
まだ更新中ですので、ご了承ください