Android存储-SQLite

来源:互联网 发布:上海东行网络 编辑:程序博客网 时间:2024/03/29 09:09

sqlite数据库是android系统内置的、轻量级的数据库,它操作起来简单,占用空间较小。这里主要讲对数据的增、删、改、查操作。

  1. SQLite数据库存储位置: data/data/<包名>/databases/xxx.db
  2. 数据库操作的一般步骤:
    1> 定义一个SQLiteOpenHelper的子类,该类主要用于完成数据库的创建和表的创建。需要重写构造方法(数据库的创建)、onCreate(…)(表的创建)、onUpgrade(…)(数据库版本升级)
    2> 定义一个数据库的操作类,主要用于完成数据库中数据的增、删、改、查
    3> 使用数据库的操作类对数据库进行操作
  3. 适配器:
    若要将数据库中的内容展现在listview中,可以使用CursorAdapter,也可以使用SimpleCursorAdapter。
    CursorAdapter:可以借助一个ViewHolder类,减少找布局中控件的次数;需要重写构造方法和newView()(主要是关联布局、找到布局中的控件)、bindView()(主要是为控件赋值)
  4. 为了防止以后忘记了,把代码都贴下来了,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
原创粉丝点击