android mysql 异步_Android_数据库_异步操作封装

/**

* A particular {@link AsyncQueryHandler} allowing clients to be notified via a

* listener. The {@link NotifyingAsyncQueryHandler} also make sure no strong

* reference is kept on the given listener (as it is often a Context).

*

*/

public class DBAsyncHandler extends AsyncQueryHandler {

private WeakReferencemListener;

/**

* Client may use this to listen to completed query operations. run on UI

* Thread

*/

public static class DBAsyncListener {

public DBAsyncListener() {

}

/**

* run on UI Thread

* cursor close() method needn't be called

*/

protected void onQueryComplete(int token, Object cookie, Cursor cursor) {

}

protected void onInsertComplete(int token, Object cookie, Uri uri) {

}

protected void onUpdateComplete(int token, Object cookie, int result) {

}

protected void onDeleteComplete(int token, Object cookie, int result) {

}

}

/**instance in UI Thread*/

public DBAsyncHandler(ContentResolver resolver, DBAsyncListener listener) {

super(resolver);

setDBListener(listener);

}

/**

* Assign the given {@link DBAsyncListener}.

*/

public void setDBListener(DBAsyncListener listener) {

mListener = (listener != null) ? new WeakReference(listener) : null;

}

private DBAsyncListener getDBListener() {

return (mListener == null) ? null : mListener.get();

}

/** such as Activity-onDestory(), this method is called */

public void clearDBListener() {

mListener = null;

}

public void startQuery(int token, Object cookie, Uri uri, String[] projection, String selection, String[] selectionArgs, String orderBy) {

super.startQuery(token, cookie, uri, projection, selection, selectionArgs, orderBy);

}

@Override

protected void onQueryComplete(int token, Object cookie, Cursor cursor) {

DBAsyncListener listener = getDBListener();

if (listener != null) {

listener.onQueryComplete(token, cookie, cursor);

if (cursor != null && !cursor.isClosed())

cursor.close();

} else if (cursor != null) {

cursor.close();

}

}

@Override

protected void onDeleteComplete(int token, Object cookie, int result) {

DBAsyncListener listener = getDBListener();

if (listener != null) {

listener.onDeleteComplete(token, cookie, result);

}

}

@Override

protected void onInsertComplete(int token, Object cookie, Uri uri) {

DBAsyncListener listener = getDBListener();

if (listener != null) {

listener.onInsertComplete(token, cookie, uri);

}

}

@Override

protected void onUpdateComplete(int token, Object cookie, int result) {

DBAsyncListener listener = getDBListener();

if (listener != null) {

listener.onUpdateComplete(token, cookie, result);

}

}

}public class MyProvider extends ContentProvider {

private final static String TAG = MyProvider.class.getSimpleName();

private final static int Person = 1;

public final static String BASE = "com.baidu.my.provider";

public final static Uri URI_Person = Uri.parse("content://com.baidu.my.provider/Person");

private final static UriMatcher MATCHER = new UriMatcher(UriMatcher.NO_MATCH); // 如果都匹配不成功,则返回构造函数中指定的参数值,默认为-1

private SQLiteDatabase db;

static {

MATCHER.addURI(BASE, "Person", Person);

}

@Override

public boolean onCreate() {

MyDBHelper dbHelper = new MyDBHelper(this.getContext());

db = dbHelper.getWritableDatabase();

return true;

}

@Override

public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {

Cursor c = null;

switch (MATCHER.match(uri)) {

case Person:

c = db.query(DBPerson.TableName, projection, selection, selectionArgs, null, null, sortOrder);

c.setNotificationUri(getContext().getContentResolver(), URI_Person);

break;

default:

break;

}

return c;

}

@Override

public String getType(Uri uri) {

switch (MATCHER.match(uri)) {

case Person:

return "vnd.android.cursor.dir/vnd." + BASE + ".request";

default:

break;

}

return null;

}

@Override

public Uri insert(Uri uri, ContentValues values) {

long id = 0;

switch (MATCHER.match(uri)) {

case Person:

id = db.insert(DBPerson.TableName, null, values);

if (id > 0) {

// 数据发生改变,发出通知

getContext().getContentResolver().notifyChange(URI_Person, null);

}

return ContentUris.withAppendedId(uri, id);

}

return null;

}

@Override

public int delete(Uri uri, String selection, String[] selectionArgs) {

// TODO Auto-generated method stub

return 0;

}

@Override

public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {

// TODO Auto-generated method stub

return 0;

}

}public class MyDBHelper extends SQLiteOpenHelper {

private static final String TAG = "DBHelper";

private static final String DB_NAME = "my.db";

private static final int DB_VERSION = /**/ 57 /**/;/****谨慎修改,否则将导致用户历史数据被删除****/

public MyDBHelper(Context context) {

super(context, DB_NAME, null, DB_VERSION);

}

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL(getRequestCreateStr());

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

db.execSQL("DROP TABLE IF EXISTS " + DBPerson.TableName);

onCreate(db);

}

private String getRequestCreateStr() {

StringBuffer sb = new StringBuffer();

sb.append("CREATE TABLE ").append(DBPerson.TableName);

sb.append(" (");

sb.append(BaseColumns._ID).append(" INTEGER PRIMARY KEY,");

sb.append(DBPerson.MetaDate.Name).append(" TEXT,");

sb.append(DBPerson.MetaDate.Age).append(" TEXT)");

return sb.toString();

}

}public interface DBPerson extends BaseDB{

public interface MetaDate {

String Name = "Name";

String Age = "Age";

}

public String TableName = "Person";

public String[] PROJECTION = {

MetaDate.Name, MetaDate.Age

};

public String SORT_ORDER = MetaDate.Age + " ASC";

}public class MainActivity extends Activity {

private DBAsyncHandler dbAsyncHandler;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//

dbAsyncHandler = new DBAsyncHandler(getContentResolver(), dbListener);

}

private DBAsyncHandler.DBAsyncListener dbListener = new DBAsyncListener() {

protected void onQueryComplete(int token, Object cookie, Cursor cursor) {

Toast.makeText(getApplicationContext(), "ok = " + cursor.getCount(), 1).show();

}

protected void onInsertComplete(int token, Object cookie, android.net.Uri uri) {

Toast.makeText(getApplicationContext(), "插入ok!", 1).show();

}

};

public void query(View view) {

//query

dbAsyncHandler.startQuery(100, null, MyProvider.URI_Person, DBPerson.PROJECTION, null, null, DBPerson.SORT_ORDER);

}

public void insert(View view) {

//insert

ContentValues initialValues = new ContentValues();

initialValues.put(DBPerson.MetaDate.Name, "baidu");

initialValues.put(DBPerson.MetaDate.Age, System.currentTimeMillis());

dbAsyncHandler.startInsert(100, null, MyProvider.URI_Person, initialValues);

}

@Override

protected void onDestroy() {

//clear

dbAsyncHandler.clearDBListener();

super.onDestroy();

}

}

源码下载》》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大家好,个人觉得用Sqlite数据库时,经常需要进行机械性的CRUD操作,故对其进行了一下封装,希望能起到抛砖引玉的作用。 目的:封装共有的CRUD 下面简单的说一下使用步骤,如果觉得多余,可以无视。 1. 实现自己的DBHelper: /** * * @author Kee.Li * * 1. 继承了SmartDBHelper,不需要重写SQLiteOpenHelper的那两个方法 * 2. 父类构造方法参数modelClasses是实体类的数组,也就是需要生产表的类的Class数组 * */ public class DBHelper extends SmartDBHelper { //数据库名称 private final static String DATABASE_NAME = "books.db"; //数据库版本 private final static int DATABASE_VERSION = 2; //需要生成数据库表的类的数组 private final static Class<?>[] modelClasses = {Book.class,User.class}; public DBHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION,modelClasses); } } 2.创建app需要的实体,也就是对应的数据库表(这里的实体添加到DBHelper的modelClasses数组中) /** * 数据库的实体 * @author Kee.Li * 关于注解: * Table: 此类对应的数据库表名 * Id:标识此属性为数据库自增长的id,应为int型 * Column:标识此属性对应的数据库字段名 */ @Table(name="t_books") public class Book{ @Id @Column(name="book_id") private int bookId; @Column(name="book_name") private String bookName; @Column(name="book_author") private String bookAuthor; //set get 方法省略.... } 3. 实现DAO,也就是对实体的CRUD类 /** * @author Kee.Li * * 此类只需要继承TemplateDAO,在构造方法里面给父类的属性dbHelper赋值,即可实现CRUD操作 * 若有复杂的操作,可以自定义方法 */ public class BookDAO extends TemplateDAO { /** * 创建DAO时初始化连接数据库对象helper * @param context */ public BookDAO(Context context) { super(new DBHelper(context)); } } 4. activity的调用 bookDAO = new BookDAO(this); List books = bookDAO.find(); 好了,到此结束,如果有什么好的建议或者意见,希望可以共同学习!谢谢大家!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值