您的位置:首页 > 移动开发 > Android开发

Android存储-SQLite

2015-11-07 22:04 281 查看
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;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: