Android的数据存储--SQLite数据库(一)

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();

以上就是很简单的数据库的操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值