[Android-Demo] Android 数据库(SQL)简单使用Demo
2013-08-23 11:02
399 查看
Demo下载地址:http://download.csdn.net/detail/u011634756/5997835(免积分哦)
++++++++++++++++++++++++++++++++++++++++++++++++
2. ListView 自定义显示数据库的内容(例如:给每一个item添加删除按钮)
注:Demo中有插入和删除按钮,长按是进行修改
首先 SQLiteOpenHelper 的建立创建一个类 来继承 SQLiteOpenHelper 它即可。
其次是数据库的增删改查实现,如下代码
最后是往数据库添加默认数据,在onCreate 里面 创建表后立马就进行insert操作。
2. ListView 显示数据库的内容
在显示数据库的时候,Android已经封装好了一个SimpleCursorAdapter可以直接使用,但是如果要自定一个界面(例如在界面中添加一个 删除按钮)我们就需要继承于CursorAdapter来实现我们自定义的布局。
继承CursorAdapter 主要会实现一个构造方法和一个newView和bindView
下面我们说一下 实现那个删除按钮
在bindView里面的Cursor是每一个Item的Cursor所以我们可以获取当前[b]Cursor的Id来删除,想法是好的但是现实是残酷的,问题来了,删除的时候不是删除的当前id而是别的Id ,通过观察发现获取的id是最后一次调用bindView的那个id,也就是说
这种方法是不可取的。 [/b]
那么我继续来观察一下,id获取这个是有问题的那么,我们现在的内容怎么没有混乱呀,这个我们可以利用这个东西进行白标记,即:使用建立一个隐藏的TextView来记录每一个Item的_id 然后在删除的时候获取这个id,立马行动发现真的可行哦
xx 代码上面已经贴出来了。。。。
====================关注小鱼===================
新浪微博:http://weibo.com/AwareMissing
腾讯微博:http://t.qq.com/y_haiyang
++++++++++++++++++++++++++++++++++++++++++++++++
一. 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操作。
@Override public 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; } @Override public 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() { @Override public 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者的区别就很明显了 */ @Override public 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所以我们可以获取当前[b]Cursor的Id来删除,想法是好的但是现实是残酷的,问题来了,删除的时候不是删除的当前id而是别的Id ,通过观察发现获取的id是最后一次调用bindView的那个id,也就是说
这种方法是不可取的。 [/b]
那么我继续来观察一下,id获取这个是有问题的那么,我们现在的内容怎么没有混乱呀,这个我们可以利用这个东西进行白标记,即:使用建立一个隐藏的TextView来记录每一个Item的_id 然后在删除的时候获取这个id,立马行动发现真的可行哦
xx 代码上面已经贴出来了。。。。
三.效果图
====================关注小鱼===================
新浪微博:http://weibo.com/AwareMissing
腾讯微博:http://t.qq.com/y_haiyang
相关文章推荐
- Android 数据库SQLite的使用简单Demo
- APIDemo学习笔记——Android上几种简单的Animation使用方法
- APIDemo学习笔记——Android上几种简单的Animation使用方法(一)
- android WebView 简单使用Demo
- android ORM数据库框架ActiveAndroid的简单使用
- 使用Kotlin实现Android简单Demo,对比JAVA实现分析具体语法不同之处(一)
- 使用VLC-Android写一个简单的电视直播demo
- Android greenDAO 数据库 简单学习之基本使用
- Android使用sqlliteOpenhelper更改数据库的存储路径放到SD卡上
- AndroidStudio GreenDao简单使用Demo
- Android数据库框架-Archiver(LiteOrm)的简单使用(一)
- 一个简单的demo学习Android远程Service(AIDL的使用)
- Android数据库SQLite使用详解二 : 学生管理系统的简单实现
- 转:android surface简单使用Demo
- sqlite3数据库简单使用demo
- android ormlite简单使用和读取sdcard下db数据库
- android数据库框架SugarORM的简单使用
- 一个简单的demo学习Android远程Service(AIDL的使用)
- Android greenDAO 数据库 简单学习之基本使用
- android 开源图表库MPChart最简单使用方法示例教程Demo--折线图 柱状图