SQLite数据库
在Android中我们如何对数据进行存储?目前比较常用的方式主要有俩种方式:
- SharePreference
- 数据库存储
初识SQLite数据库
SQLite数据库是Android中自带的一款轻量级数据库,遵守ACID(原子性、一致性、隔离性和持久性,即ACID)的关系数据库管理系统,它包含在一个相对小的C程序库中。与许多其它数据库管理系统不同,SQLite不是一个客户端/服务器结构的数据库引擎,而是被集成在用户程序中。在android中我们可以调用相关的API来进行数据库的操作。
在Android中进行数据库的操作
Android中数据库的操作主要分为以下步骤:
- 创建数据库
- 数据库的基本操作
创建数据库:
我们在Android中如何创建数据库:在Android中为了更方便的操作数据库,专门提供了一个的SQLiteOpenHelper帮助类,我们可以借助这个类去进行数据库的创建和升级,我们可以创建一个类去继承SQLiteOpenHelper:
/**我们需要继承SQLiteOpenHelper这个类,来创建我们的数据库类*/
/**SQLiteOpenHelper是一个抽象类,其中有俩个抽象方法:onCreate(),onUpgrade()*/
public class MySQLiteOpenHelper extends SQLiteOpenHelper
{
public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
//这个方法是为了创建数据库
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//这个方法数据库的升级,其中的参数分别是:数据库的名称,数据库旧的版本,数据库新的版本
}
}
SQLiteOpenHelper中还有俩个非常重要的方法:getReadableDatabase()和getWriteableDatabase(),这俩个方法都可以创建或者打开一个现有的数据库(存在的话就直接打开,否则就创建一个新的)这俩个方法的区别是:当数据库不能写入的时候(磁盘满了)getReadableDatabase()方法返回的对象将以只读的方式打开数据库,而getWriteableDatabase()则会出现 异常。
构建出SQLiteOpenHelper的实例后,在调用getReadableDatabase()或者getWriteableDatabase()进行数据的创建,数据库文件会放在/data/data/your package name/database下
/**
需要注意的是:在今后的开发过程中,如果我们需要去创建使用数据库,需要根据Android版本来进行动态申请权限,否则可能程序崩溃。
*/
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
/**
* 创建一个User数据库,其中创建一个user表,建表语句:
* create table user{
* int id primary key autoincrement,
* varchar name,
* int age,
* varchar sex
* }
* @param db
*/
public static final String createUser= "create table user(" +
" id integer primary key autoincrement,"
+" name varchar(20)," +
" age integer," +
" sex varchar(4))";
@Override
public void onCreate(SQLiteDatabase db) {
//执行创建的语句
Log.e("执行了","执行了!");
db.execSQL(createUser);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
以上我们就创建好了一个数据库文件,可以通过AndroidStudio的DDMS工具进行查看数据库。这样的话我们就能在相应的文件夹下找到合适的数据库文件。
数据库创建好用,我们就可以进行数据的增删改查了。下面我们需要对界面重新做出改动:
这个是界面的展示以及代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.xinning.chatapplication.MainActivity">
<!--需要进行添加的字段与创建的数据库要一致
这里没有将每个控件的共有属性进行抽取。开发中需要注意
还要注意要将文字尽可能的放入到string文件中
-->
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:hint="请输入增加的姓名,方便后期的改,查,删"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/age"
android:inputType="textPassword"
android:layout_width="match_parent"
android:hint="请输入对应的年龄,方便后期的改,查,删"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/sex"
android:inputType="textPassword"
android:layout_width="match_parent"
android:hint="请输入对应的性别,方便后期的改,查,删"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/add"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="增"
/>
<Button
android:id="@+id/update"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="改"
/>
<Button
android:id="@+id/del"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="删"
/>
<Button
android:id="@+id/query"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="查"
/>
</LinearLayout>
</LinearLayout>
代码中的一系列操作展示:我们会依次写出增删改查四个操作
- 增:
数据库给我们提供了insert()方法,用来供我们插入数据,主要含有三个参数:第一个是需要插入的表名,第二个是需要插入的列名,第三个是需要插入的值,如果在表中字段可以为空的情况下,可以插入null.,记得我们要指定主键,且主键唯一。
if(TextUtils.isEmpty(name)||TextUtils.isEmpty(age)||TextUtils.isEmpty(sex)){
Toast.makeText(MainActivity.this,"请完善填写的数据",Toast.LENGTH_SHORT).show();
return;
}
//开始数据的添加。
ContentValues values=new ContentValues();
values.put("name",name);
values.put("sex",sex);
values.put("age",age);
db.insert("Users",null,values);
values.clear();
//因为在数据库中的咱们的姓名字段加了唯一约束,所以当输入相同的名字后,会提示一个错误。
- 删:
if(TextUtils.isEmpty(name)){
Toast.makeText(MainActivity.this,"请输入删除的数据",Toast.LENGTH_SHORT).show();
return;
}
db.delete("User","name=?",new String[]{name});
break;
//更新
case R.id.update:
if(TextUtils.isEmpty(name)){
Toast.makeText(MainActivity.this,"请填写要更改的人名称员",Toast.LENGTH_SHORT).show();
return;
}
if(TextUtils.isEmpty(sex)||TextUtils.isEmpty(age)){
Toast.makeText(MainActivity.this,"修改的数据不能为空",Toast.LENGTH_SHORT).show();
return ;
}
ContentValues values1=new ContentValues();
values1.put("sex",sex);
values1.put("age",age);
//数据更新:第一个参数是表名,第二个是要更改的数据,第三个是查询条件,第四个主要的信息
db.update("User",values1,"name=?",new String[]{name});
values1.clear();
- 改:
if(TextUtils.isEmpty(name)){
Toast.makeText(MainActivity.this,"请输入删除的数据",Toast.LENGTH_SHORT).show();
return;
}
db.delete("User","name=?",new String[]{name});
break;
//更新
case R.id.update:
if(TextUtils.isEmpty(name)){
Toast.makeText(MainActivity.this,"请填写要更改的人名称员",Toast.LENGTH_SHORT).show();
return;
}
if(TextUtils.isEmpty(sex)||TextUtils.isEmpty(age)){
Toast.makeText(MainActivity.this,"修改的数据不能为空",Toast.LENGTH_SHORT).show();
return ;
}
ContentValues values1=new ContentValues();
values1.put("sex",sex);
values1.put("age",age);
//数据更新:第一个参数是表名,第二个是要更改的数据,第三个是查询条件,第四个主要的信息
db.update("User",values1,"name=?",new String[]{name});
values1.clear();
- 查:
Cursor cursor=db.query("User",null,null,null,null,null,null);
if(cursor.moveToFirst()){
do{
String name1= cursor.getString( cursor.getColumnIndex("name"));
String age1=cursor.getString(cursor.getColumnIndex("age"));
String sex1=cursor.getString(cursor.getColumnIndex("sex"));
tvDisplay.setText("name:"+name1+",age:"+age1+",sex:"+sex1);
}while (cursor.moveToNext());
}
cursor.close();
以上就是很简单的数据库的操作。