美文网首页
Android中Sqlite数据库读写数据

Android中Sqlite数据库读写数据

作者: baolvlv | 来源:发表于2017-09-01 14:46 被阅读0次

        Sqlite数据库作为一个轻量级数据库,可以较为方便地实现Android中诸如历史记录的储存等操作。本文首先介绍Sqlite数据库的创建与读写等数据库操作,而后完成使用界面的方式操作Sqlite数据库中的数据。

详细代码:github.com/Baolvlv/LearnAndroid/tree/master/UsingSqlite

一、Sqlite数据库的数据读取与写入

SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的SQL数据库引擎。它是一个零配置的数据库,不需要在系统中配置。SQLite引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite直接访问其存储文件。

1.创建

创建类继承自SQLiteOpenHelper

public classDbextendsSQLiteOpenHelper {

添加构造函数,不需要的参数可以不写

//构造函数,参数:name为数据库名称,Cursor用于逐行读取数据库结果,封装的查询结果,version为版本号

publicDb(Context context) {

super(context,"db", null,1);

}

重写数据库创建与升级方法

//当应用中不存在数据库时创建

@Override

public voidonCreate(SQLiteDatabase db) {

//创建表,包含name,sex两列,文本类型,默认值为空  PRIMARY KEY AUTOINCREMENT主键自增

db.execSQL("CREATE TABLE user("+

"_id INTEGER PRIMARY KEY AUTOINCREMENT,"+

"name TEXT,"+

"sex TEXT)");

}

//数据库升级,sql语句操作数据库,检查操作系统中的同名数据库版本号低则升级

@Override

public voidonUpgrade(SQLiteDatabase db, intoldVersion, intnewVersion) {

}

2.写入数据

//实例化数据库对象

Db db =newDb(this);

//获取可写入数据库用于插入数据

SQLiteDatabase dbWrite = db.getWritableDatabase();

//使用ContentValues封装数据

ContentValues cv =newContentValues();

//输入对应的键值对的值

cv.put("name","bss");

cv.put("sex","男");

//插入数据,参数为表名,当列为空时的填充值,封装数据的ContentValue

dbWrite.insert("user",null,cv);

使用完成后关闭数据库

//使用完之后关闭数据库

dbWrite.close();

3.读取数据

获取可读取数据库

SQLiteDatabasedbRead = db.getReadableDatabase();

使用query()方法查询,返回值为Cursor

Cursor c = dbRead.query("user",null,null,null,null,null,null);

query()的参数为:

参数:表名,查询的列,查询条件,条件参数,分组,分组条件,顺序

查询列的写法:

new String[]{"name"}

为防止sql注入攻击,查询条件与条件参数为:

"name =?",new String[]{"bss"

通过Cursor的moveToNext方法判断结果是否结束,通过getColumnIndex获取查询列的编号

通过getString获取编号下的值

while(c.moveToNext()){

String name = c.getString(c.getColumnIndex("name"));

String sex = c.getString(c.getColumnIndex("sex”));

二、通过界面操作Sqlite数据库

将数据库查询结果呈现到ListView中

主布局中添加listView,声明SimpleCursorAdapter对象用于接收查询结果Cursor

privateSimpleCursorAdapteradapter;

实例化数据库对象,获取可读写数据库对象

db=newDb(this);

dbRead=db.getReadableDatabase();

dbWrite=db.getWritableDatabase();

实例化SimpleCursorAdapter对象,参数为

//参数:context,显示结果的布局资源,Cursor,Cursor的需要输出的数据源,输出的位置,初次查询时cursor可以为空

adapter=newSimpleCursorAdapter(this,R.layout.user_list_cell

,null,newString[]{"name","sex"},new int[]{R.id.tvName,R.id.tvSex});

用于呈现结果的布局需要手动创建,线形布局,分别用大小文本呈现

大小文本的样式分别为:

android:textAppearance="?android:textAppearanceLarge”/>

android:textAppearance="?android:textAppearanceMedium"/>

注意:SimpleCursorAdapter要求数据表中必须有_id这一列,且为自增主键,创建如下:

//创建表,包含name,sex两列,文本类型,默认值为空  PRIMARY KEY AUTOINCREMENT主键自增

db.execSQL("CREATE TABLE user("+

"_id INTEGER PRIMARY KEY AUTOINCREMENT,"+

"name TEXT DEFAULT\"\","+

"sex TEXT DEFAULT\"\")");

实例化ListView并为listview设置adapter

lv= (ListView) findViewById(R.id.list);

//只要adapter发生改变,setAdapter()函数就执行

lv.setAdapter(adapter);

设置刷新列表的函数,通过改变adapter的cursor从而改变adapter达到刷新列表的目的

//更改adapter的Cursor,从而达到更新列表项

private voidrefershListview(){

Cursor c =dbRead.query("user",null,null,null,null,null,null);

adapter.changeCursor(c);

}

执行refershListView后,adapter改变,setAdapter自动执行,列表刷新

在button的onClick函数中,通过ContentValue存入数据,通过dbwriter将数据插入数据库

插入完成后刷新列表

public voidonClick(View v) {

ContentValues cv =newContentValues();

cv.put("name",etName.getText().toString());

cv.put("sex",etSex.getText().toString());

dbWrite.insert("user",null,cv);

refershListview();

}

实现ListView长按删除item

为listView设置onItemLongClickListener,返回值改为true,提示系统此次为长按操作,可以继续执行后续操作

lv.setOnItemLongClickListener(newAdapterView.OnItemLongClickListener() {

@Override

public booleanonItemLongClick(AdapterView parent,View view, final intposition, longid) {

//反馈操作系统此次是否为长按,true为长按,可触发震动等

return true;

通过AlertDialog创建对话框,设置title与message,通过积极按钮(positive Button)设置需要操作的button,铜过消极按钮(negative Button)设置不需要操作的button,positive button需要设置DialogInterface.onClickListener,negative button的事件监听器为null,通过show弹出对话框。

newAlertDialog.Builder(MainActivity.this).setTitle("提醒").setMessage("你确定要删除该项吗?")

.setPositiveButton("确定", newDialogInterface.OnClickListener() {

通过adapter中的cursor移动到相应位置,通过dbWriter删除,删除后刷新列表

//通过adapter获取到Cursor,并移动到长按的位置

Cursor c =adapter.getCursor();

//内部类访问可变变量有问题

c.moveToPosition(position);

//获取数据库中这条数据的_id

intitemId = c.getInt(c.getColumnIndex("_id"));

//删除对应的数据,参数为表名,删除的条件,条件的结果

dbWrite.delete("user","_id=?",newString[]{itemId+""});

refershListview();

注意:数据库创建时的onCreate函数在没有数据库时才会创建,如需重新创建应先手动清除应用数据

相关文章

网友评论

      本文标题:Android中Sqlite数据库读写数据

      本文链接:https://www.haomeiwen.com/subject/inzhjxtx.html