Demo下载地址:http://download.csdn.net/detail/u011634756/5997835免积分哦 ++++++++++++++++++++++++++++++++++++++++++++++++

一. Demo主要内容


1. SQLiteOpenHelper 和 数据库的增删改查

2. ListView 自定义显示数据库的内容(例如:给每一个item添加删除按钮)

注:Demo中有插入和删除按钮,长按是进行修改


二. Demo重点代码


1. SQLiteOpenHelper 的建立 和增删改查 和添加默认数据

首先 SQLiteOpenHelper 的建立创建一个类 来继承 SQLiteOpenHelper 它即可。

其次是数据库的增删改查实现,如下代码

/** * 往数据库里面插入数据  * @param data * @return */public long insertData(String data[]){ContentValues insertValues = new ContentValues();insertValues.put(KEY_NAME, data[0]);insertValues.put(KEY_SEX, data[1]);insertValues.put(KEY_ADDRESS,data[2]);return mSqLiteDatabase.insert(DB_TABLE, KEY_ID, insertValues) ;}/** * 根据 _id 来删除数据库中的某一条数据 * @param _id * @return */public boolean deleteData(long _id){return mSqLiteDatabase.delete(DB_TABLE, KEY_ID + "=" + _id, null) > 0 ;}/** * 通过_id 来更新某一条数据 * @param _id * @param data * @return */public boolean updateData( long _id ,String data[]){getWritableDatabase();ContentValues updataValues = new ContentValues();updataValues.put(KEY_NAME, data[0]);updataValues.put(KEY_SEX, data[1]);updataValues.put(KEY_ADDRESS,data[2]);return  mSqLiteDatabase.update(DB_TABLE, updataValues, KEY_ID + " = " + _id, null)>0;}/** * 查询数据 , 当前的所有数据 * @return */public Cursor fetchAllData(){return mSqLiteDatabase.query(DB_TABLE, null, null, null, null, null, null);}/** * 通过Id来查询 当前id下的数据 * @param _id * @return */public Cursor fetchDataById(long _id){return mSqLiteDatabase.query(DB_TABLE, null,KEY_ID + "=" + _id, null, null, null, null);}

最后是往数据库添加默认数据,在onCreate 里面 创建表后立马就进行insert操作。

@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL(CREATE_DB);// 添加一些默认数据db.execSQL(TEST_INSERT);}

2.  ListView 显示数据库的内容

在显示数据库的时候,Android已经封装好了一个SimpleCursorAdapter可以直接使用,但是如果要自定一个界面(例如在界面中添加一个 删除按钮)我们就需要继承于CursorAdapter来实现我们自定义的布局。

继承CursorAdapter 主要会实现一个构造方法和一个newView和bindView 

public SqlAdapter(Context context, Cursor c, int layout) {super(context, c );res_layout = layout;}@Overridepublic void bindView(View view, Context context, Cursor c) {Log.v(TAG," Adapter , bindView");final Context _context = context;final Cursor cursor = c;final ViewHolder holder = (ViewHolder) view.getTag();holder.id.setText(cursor.getString(cursor.getColumnIndex(KEY_ID)));holder.name.setText(cursor.getString(cursor.getColumnIndex(KEY_NAME)));holder.sex.setText(cursor.getString(cursor.getColumnIndex(KEY_SEX)));holder.address.setText(cursor.getString(cursor.getColumnIndex(KEY_ADDRESS)));holder.removeButton.setOnClickListener(new Button.OnClickListener() {@Overridepublic void onClick(View v) {long id = Long.parseLong(holder.id.getText().toString());SQLDemoOpenHelper mHelper = new SQLDemoOpenHelper(_context);mHelper.open();mHelper.deleteData(id);Cursor newCursor = mHelper.fetchAllData();changeCursor(newCursor);notifyDataSetChanged();mHelper.close();}});}/** * 说一个我理解的哈, newView相当于 Service的onCreate * 而bindView 相当于 Service的onStart  * 2者的区别就很明显了 */@Overridepublic View newView(Context context, Cursor c, ViewGroup arg2) {Log.i(TAG," Adapter , newView");View view = View.inflate(context, res_layout, null);ViewHolder holder = new ViewHolder();holder.name = (TextView) view.findViewById(R.id.tv_item_name);holder.sex = (TextView) view.findViewById(R.id.tv_item_sex);holder.address = (TextView) view.findViewById(R.id.tv_item_address);holder.removeButton = (Button) view.findViewById(R.id.bu_remove);holder.id = new TextView(context);holder.id.setVisibility(View.INVISIBLE);view.setTag(holder);return view;}/** * 通过一个隐藏的 TextView 来记住当前item对应数据库的 _id * 这个样子来实现 删除按钮时候的操作 * @author yuhaiyang * */final static class ViewHolder {public TextView id;public TextView name;public TextView sex;public TextView address;public Button removeButton;}

下面我们说一下 实现那个删除按钮

在bindView里面的Cursor是每一个Item的Cursor所以我们可以获取当前Cursor的Id来删除,想法是好的但是现实是残酷的,问题来了,删除的时候不是删除的当前id而是别的Id ,通过观察发现获取的id是最后一次调用bindView的那个id,也就是说 这种方法是不可取的。 

那么我继续来观察一下,id获取这个是有问题的那么,我们现在的内容怎么没有混乱呀,这个我们可以利用这个东西进行白标记,即:使用建立一个隐藏的TextView来记录每一个Item的_id 然后在删除的时候获取这个id,立马行动发现真的可行哦

xx 代码上面已经贴出来了。。。。


三.效果图



====================关注小鱼===================

新浪微博http://weibo.com/AwareMissing

腾讯微博http://t.qq.com/y_haiyang


更多相关文章

  1. android客户端向服务器端验证登陆方法的实现2
  2. android : 如何通过provider向外共享数据
  3. Android之SharedPreferences详解与原理分析
  4. Android手机客户端与Servlet交换数据(by quqi99)
  5. Android特有的数据结构分析
  6. Android(安卓)ORM 框架——GreenDao的基本用法
  7. Android系统源码数据库(mmssms.db)
  8. Android之ListView控件
  9. mybatisplus的坑 insert标签insert into select无参数问题的解决

随机推荐

  1. Android学习之表格布局管理器
  2. Android桌面小部件实例 桌面小时钟
  3. How C/C++ Debugging Works on Android
  4. Android监听手机网络变化
  5. 使用Scala开发Android
  6. Android(安卓)Adapter详解
  7. Android(安卓)学习笔记--android——Acti
  8. Android的AnimationSet动画实现图片的轮
  9. Android好文章
  10. Android(安卓)SDK 自带项目GestureBuilde