Android存储-SQLite
来源:互联网 发布:上海东行网络 编辑:程序博客网 时间:2024/03/29 09:09
sqlite数据库是android系统内置的、轻量级的数据库,它操作起来简单,占用空间较小。这里主要讲对数据的增、删、改、查操作。
- SQLite数据库存储位置: data/data/<包名>/databases/xxx.db
- 数据库操作的一般步骤:
1> 定义一个SQLiteOpenHelper的子类,该类主要用于完成数据库的创建和表的创建。需要重写构造方法(数据库的创建)、onCreate(…)(表的创建)、onUpgrade(…)(数据库版本升级)
2> 定义一个数据库的操作类,主要用于完成数据库中数据的增、删、改、查
3> 使用数据库的操作类对数据库进行操作 - 适配器:
若要将数据库中的内容展现在listview中,可以使用CursorAdapter,也可以使用SimpleCursorAdapter。
CursorAdapter:可以借助一个ViewHolder类,减少找布局中控件的次数;需要重写构造方法和newView()(主要是关联布局、找到布局中的控件)、bindView()(主要是为控件赋值) - 为了防止以后忘记了,把代码都贴下来了,activity的布局文件有四个button和listview,adapter的布局中有4个TextView:
SQLiteOpenHelper子类;
package com.example.administrator.cunchu.utils;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/** * 用于数据库的创建及表的建立. */public class DBHelper2 extends SQLiteOpenHelper { // 重写构造方法 : 用于创建数据库 public DBHelper2(Context context) { super(context, DBUtil.DB_NAME, null, 1); } public DBHelper2(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } // 创建表 @Override public void onCreate(SQLiteDatabase db) { String sql="create table "+ DBUtil.TABLE_NAME + "(_id integer primary key autoincrement," + "userName text,sex text,age integer )"; db.execSQL(sql); } // 版本更新时调用 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }}
数据库的操作类:
package com.example.administrator.cunchu.utils;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;/** * 用于数据库的增、删、改、查 */public class DBManager2 { private static DBHelper2 helper2; // 获取 helper2 的实例 public static DBHelper2 getHepler(Context context) { if (helper2 == null) { helper2 = new DBHelper2(context); } return helper2; } // 关闭数据库 public static void closeDB(SQLiteDatabase db) { if (db != null) { db.close(); } } /* 增 nullColumnHack: 当values参数为空或者里面没有内容的时候,insert是会失败的(底层数据库不允许插入一个空行), 为了防止这种情况,我们要在这里指定一个列名, 到时候如果发现将要插入的行为空行时,就会将你指定的这个列名的值设为null,然后再向数据库中插入 */ public static long inertData(SQLiteDatabase db, String table, String nullColumnHack, ContentValues values){ if (db != null) { long count = db.insert(table, nullColumnHack, values); return count; } return 0; } // 删 public static int deleteData(SQLiteDatabase db,String table,String whereClause,String[] whereArgs){ if(db!=null){ int count = db.delete(table, whereClause, whereArgs); return count; } return 0; } // 改 public static int updateData(SQLiteDatabase db,String table,ContentValues values,String whereClause,String[] whereArgs){ if(db!=null){ int count = db.update(table, values, whereClause, whereArgs); return count; } return 0; } // 查 public static Cursor queryData(SQLiteDatabase db,String sql, String[] selectionArgs){ if(db!=null){ Cursor cursor = db.rawQuery(sql,selectionArgs); return cursor; } return null; }}
具体操作:
package com.example.administrator.cunchu;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.support.v4.widget.CursorAdapter;import android.support.v4.widget.SimpleCursorAdapter;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.ListView;import android.widget.Toast;import com.example.administrator.cunchu.adapters.MyCursorAdapter;import com.example.administrator.cunchu.utils.DBHelper;import com.example.administrator.cunchu.utils.DBHelper2;import com.example.administrator.cunchu.utils.DBManager2;import com.example.administrator.cunchu.utils.DBUtil;public class SQLite2Activity extends AppCompatActivity implements View.OnClickListener{ private DBHelper2 helper2; private ListView lv; private Button insert; private Button delete; private Button update; private Button query; private int num=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sqlite); initView(); //初始化组件 } // 初始化组件 private void initView() { insert = (Button) findViewById(R.id.sqlite_insert); delete = (Button) findViewById(R.id.sqlite_delete); update = (Button) findViewById(R.id.sqlite_update); query = (Button) findViewById(R.id.sqlite_query); lv = (ListView) findViewById(R.id.sqlite_lv); insert.setOnClickListener(this); delete.setOnClickListener(this); update.setOnClickListener(this); query.setOnClickListener(this); // Helper2 helper2 = DBManager2.getHepler(SQLite2Activity.this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.sqlite_insert: // 增 inSertSqlite(); querySqlite(); break; case R.id.sqlite_delete: // 删 deleteSqlite(); querySqlite(); break; case R.id.sqlite_update: // 改 updateSqlite(); querySqlite(); break; case R.id.sqlite_query: // 查 querySqlite(); break; } } private void inSertSqlite() { // 打开数据库 SQLiteDatabase db=helper2.getWritableDatabase(); // 插入 ContentValues values=new ContentValues(); values.put("userName","乐乐"+(num++)); values.put("age",20); values.put("sex", "男"); long insert = db.insert(DBUtil.TABLE_NAME, null, values); if(insert>0){ Toast.makeText(SQLite2Activity.this,"插入成功-"+insert,Toast.LENGTH_SHORT).show(); } // 关闭 DBManager2.closeDB(db); } // 删 private void deleteSqlite() { // 打开数据库 SQLiteDatabase db=helper2.getWritableDatabase(); // 删除 int i = DBManager2.deleteData(db, DBUtil.TABLE_NAME, "userName=?", new String[]{"乐乐3"}); if(i>0){ Toast.makeText(SQLite2Activity.this,"删除成功-"+i,Toast.LENGTH_SHORT).show(); } //关闭数据库 DBManager2.closeDB(db); } // 改 private void updateSqlite() { // 打开数据库 SQLiteDatabase db=helper2.getWritableDatabase(); // 修改 ContentValues values=new ContentValues(); values.put("userName", "嘻嘻"); int i = DBManager2.updateData(db, DBUtil.TABLE_NAME, values, "_id=?", new String[]{"3"}); if(i>0){ Toast.makeText(SQLite2Activity.this,"修改成功-"+i,Toast.LENGTH_SHORT).show(); } // 关闭数据库 DBManager2.closeDB(db); } // 查询 private void querySqlite() { // 打开数据库 SQLiteDatabase db=helper2.getWritableDatabase(); // 查询 String sql="select * from "+ DBUtil.TABLE_NAME; Cursor cursor = DBManager2.queryData(db, sql, null); // 将查询的结果显示到 listview 上 if(cursor!=null&&cursor.getCount()>0){ // SimpleCursorAdapter// SimpleCursorAdapter adapter=new SimpleCursorAdapter(this,R.layout.item,cursor,// new String[]{"_id","userName","sex","age"},// new int[]{R.id.item_id,R.id.item_name,R.id.item_sex,R.id.item_age},// CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); // MyCursorAddpter //CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER MyCursorAdapter adapter=new MyCursorAdapter(SQLite2Activity.this,cursor, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); lv.setAdapter(adapter); }else { Toast.makeText(SQLite2Activity.this,"数据库中暂无数据",Toast.LENGTH_SHORT).show(); } // 关闭数据库 DBManager2.closeDB(db); }}
CursorAdapter子类;
package com.example.administrator.cunchu.adapters;import android.content.Context;import android.database.Cursor;import android.support.v4.widget.CursorAdapter;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import com.example.administrator.cunchu.R;/** * MyCursorAdapter 适配器 */public class MyCursorAdapter extends CursorAdapter{ // 构造函数 public MyCursorAdapter(Context context, Cursor c, int flags) { super(context, c, flags); } // 重写的方法 @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { ViewHolder vh=new ViewHolder(); // 关联布局 View view = LayoutInflater.from(context).inflate(R.layout.item, null); // 找到布局中的控件 vh.id= (TextView) view.findViewById(R.id.item_id); vh.name= (TextView) view.findViewById(R.id.item_name); vh.age= (TextView) view.findViewById(R.id.item_age); vh.sex= (TextView) view.findViewById(R.id.item_sex); view.setTag(vh); return view; } @Override public void bindView(View view, Context context, Cursor cursor) { // 赋值 ViewHolder vh= (ViewHolder) view.getTag(); int idText=cursor.getInt(cursor.getColumnIndex("_id")); String nameText=cursor.getString(cursor.getColumnIndex("userName")); int ageText=cursor.getInt(cursor.getColumnIndex("age")); String sexText=cursor.getString(cursor.getColumnIndex("sex")); vh.id.setText(idText+""); vh.sex.setText(sexText); vh.age.setText(ageText+""); vh.name.setText(nameText); } public class ViewHolder { TextView id,name,age,sex; }}
0 0
- Android之SQlite存储
- Android之SQlite存储
- Android之SQlite存储
- Android之SQlite存储
- Android之Sqlite存储
- Android之SQlite存储
- Android之SQlite存储
- android数据存储--SQLite
- Android 数据库存储 SQLite
- Android数据存储---SQLite
- android存储---sqlite浅谈
- Android数据存储-SQLite
- Android存储之SQLite
- android sqlite 存储图片
- android-数据存储sqlite
- Android -SQLite数据库存储
- Android存储-SQLite
- Android SQLite数据库存储
- HDU 3220 Alice’s Cube
- git及github的使用
- 改进PostgreSQL锁机制
- 2015大型校园招聘会后感
- Java实现二叉树、 双链表
- Android存储-SQLite
- uva 12627——Erratic Expansion
- 最长连续序列
- 手机css3动画与animate动画流畅度比较
- 设置xcode中模版tableViewCell的textLabel和detailTextLabel背景颜色
- MATLAB线性分类器
- 关于html中CSS的小结
- uva 714——Copying Books
- 机器学习数据预处理