Android学習のはSQLiteを使って簡単な(CRUD)添削を実現します.
5095 ワード
SQliteを使って簡単なCRUDを実現します.
まず、SQLiteOpenHelperという抽象的なクラスを継承するヘルプが必要です.
以下はコードを簡潔にするために、実装コードのみを貼り付けます.
増加
削除
各行に対して、我々は、キューラーのうちの一つのget方法を用いて、例えばget String()またはget Long()のように列の値を取得することができる.各get方法については、取得したい列のインデックス位置を伝達しなければならず、インデックス位置は、get ColumnIndex()またはget ColumnIndexOrThrow()を呼び出すことによって得られる.
最後に書く:
コードが粗いですが、コメントがあります.
問題があれば、コメントしてください.
まず、SQLiteOpenHelperという抽象的なクラスを継承するヘルプが必要です.
public class DbHelper extends SQLiteOpenHelper {
private static final int VERSION = 1;
private static final String DB_NAME = "test.db";
public static final String TABLE_NAME = "TEST";
public static final String COLUMN_NAME_CONTENT = "content";
private static final String CREATE_TABLE_SQL =
"create table " + TABLE_NAME + "(id integer primary key autoincrement," + COLUMN_NAME_CONTENT + " varchar)";
public DbHelper(Context context) {
/**
* : activity
* :
* :
* :
*/
super(context, DB_NAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
//
//
db.execSQL(CREATE_TABLE_SQL);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// ,
db.execSQL("drop table if exists TEST");
onCreate(db);
}
}
ノート:データベースの操作は時間がかかるかもしれないので、データベースの操作をバックグラウンドスレッドに書いたほうがいいです.http://blog.csdn.net/liuhe688/article/details/6532519)以下はコードを簡潔にするために、実装コードのみを貼り付けます.
増加
@Override
protected Long doInBackground(String... params) {
long rowId = 0;
//
SQLiteDatabase db = mDbHelper.getWritableDatabase();
// ContentValues
ContentValues cValues = new ContentValues();
cValues.put(DbHelper.COLUMN_NAME_CONTENT, params[0]);
//
db.beginTransaction();
try {
// : , rowId
/**
* :
* : null NULL , NULL
* :
*/
rowId = db.insert(DbHelper.TABLE_NAME, null, cValues);
// : ''
/*String sql = "insert into " + DbHelper.TABLE_NAME + " values(null,\'" + params[0] + "\')";
Log.d(TAG, "sql:" + sql);
db.execSQL(sql);*/
// , false, rollback
db.setTransactionSuccessful();
} finally {
// , , ,
db.endTransaction();
}
return rowId;
}
使い方を勧めます.使い方が二極で間違えやすいなら、転んでしまいます.削除
@Override
protected Long doInBackground(String... params) {
SQLiteDatabase db = mDbHelper.getWritableDatabase();
db.beginTransaction();
try {
long rowId = db.delete(
DbHelper.TABLE_NAME, //
"id=?", // where , id
new String[]{params[1]} // where
);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
return rowId;
}
更新@Override
protected Long doInBackground(String... params) {
//
SQLiteDatabase db = mDbHelper.getWritableDatabase();
// ContentValues
ContentValues cValues = new ContentValues();
cValues.put(DbHelper.COLUMN_NAME_CONTENT, params[2]);
db.beginTransaction();
try {
long rowId = db.update(
DbHelper.TABLE_NAME, //
cValues, //
"id=?", // where , id
new String[]{params[1]} // where
);
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
return rowId;
}
クエリー@Override
protected String doInBackground(String... params) {
SQLiteDatabase db = mDbHelper.getReadableDatabase();
Cursor cursor = db.query(
DbHelper.TABLE_NAME, //
new String[]{"id", "content"}, //
"id=?", // where , id
new String[]{params[0].toString()},// where
null, // group
null, // having
"id DESC" // id
);
String id = null, content = null;
// ,
if (cursor.moveToFirst()) {
for (int i = 0; i < cursor.getCount(); i++) {
cursor.move(i);
id = cursor.getString(cursor.getColumnIndex("id"));
content = cursor.getString(cursor.getColumnIndex("content"));
}
}
cursor.close(); // ,
return content;
}
cursorの中の行を検索するには、cursorのうちの一つのmove方法を使用しますが、値を読み取る前に呼び出してください.一般的には、まずmoveToFirst関数を呼び出し、読み取り位置を結果セットの最初の位置に置くべきである.各行に対して、我々は、キューラーのうちの一つのget方法を用いて、例えばget String()またはget Long()のように列の値を取得することができる.各get方法については、取得したい列のインデックス位置を伝達しなければならず、インデックス位置は、get ColumnIndex()またはget ColumnIndexOrThrow()を呼び出すことによって得られる.
最後に書く:
コードが粗いですが、コメントがあります.
問題があれば、コメントしてください.