Android学習のはSQLiteを使って簡単な(CRUD)添削を実現します.

5095 ワード

SQliteを使って簡単なCRUDを実現します.
まず、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()を呼び出すことによって得られる.
最後に書く:
コードが粗いですが、コメントがあります.
問題があれば、コメントしてください.