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

来源:互联网 发布:php location 不跳转 编辑:程序博客网 时间:2024/05/29 07:55

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

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

原创粉丝点击