Android中Sqlite的简单使用

225 阅读3分钟

SQLite是Android里的轻量级关系型数据库,它运算速度快,占用资源少,通常只需要几百k的内存就够了,支持标准的sql语法和数据库的ACID事务。

在Android中为了能够更加方便的管理数据库,专门提供了一个SQLiteOpenHelper帮助类,借助这个类就可以非常简单的对数据库进行创建和升级。

一 .界面图

二 .实现

1.实现界面并在activity里绑定视图

。。。。。。。。。。

2.创建StudentDataBaseHelper类继承于SQliteOpenHelper

Android 提供的SQLiteOpenHelper.java是一个抽象类,用来帮助我们实现数据库的操纵,有了SQLiteOpenHelper类,打开SQLiteDatabase的繁杂工作就简单多了

public class StudentDataBaseHelper extends SQLiteOpenHelper {
    //数据库版本号和数据库名
    private static final int VERSION = 1;
    private static final String DATABASE_NAME = "studentBase.db";

    //带全部参数的构造函数,删掉了几个参数,只剩下context,其他都写好了
    public StudentDataBaseHelper(@Nullable Context context) {
        super(context, DATABASE_NAME, null, VERSION);
    }
    //onCreate()方法,创建数据库,首次创建数据库时,就会调用onCreate(SQLiteDatabase)方法,本次student表里有name和class列。
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        String sql = "create table student(name varchar(20),class varchar(20))";
        sqLiteDatabase.execSQL(sql);
    }
    //onUpgrade()方法,负责与升级相关的工作,先不写
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        
    }
}

3.新建数据库

final SQLiteDatabase db = new StudentDataBaseHelper(getApplicationContext())
                .getWritableDatabase();

4.对数据库进行操作

负责处理数据库写入和更新操作的辅助类是ContentValues。它是一个键值存储类,类似于Java的HashMap和前面用过的Bundle。不同的是,ContentValues只能用于处理SQLite数据。

(1)增

insert(String table, String nullColumnHack, ContentValues values)

方法传入的第一个参数是数据表,第三个是要写入的数据。 第二个参数称为nullColumnHack。当values参数为空或者里面没有内容的时候,insert是会失败的(底层数据库不允许插入一个空行),为了防止这种情况,要在这里指定一个列名,到时候如果发现将要插入的行为空行时,就会将你指定的这个列名的值设为null,然后再向数据库中插入。

 mInsertButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ContentValues values=new ContentValues();
                values.put("name", String.valueOf(mInsertStuNameText.getText()));
                values.put("class", String.valueOf(mInsertStuClassText.getText()));
                db.insert("student",null,values);
            }
        });

(2)改

update(String table, ContentValues values, String whereClause, String[] whereArgs)

方法传入表名,value,where子句,where子句的参数值。

 mUpdateButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ContentValues values2 = new ContentValues();
                values2.put("name", String.valueOf(mUpdateStuNameText.getText()));
                values2.put("class", String.valueOf(mUpdateStuClassText.getText()));
                db.update("student", values2, "name=?", new String[]{mUpdateStuNameText.getText().toString()});
            }
        });

(3)删

delete(String table, String whereClause, String[] whereArgs)

方法传入表名,where子句,where子句的参数值。

 mUpdateButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ContentValues values2 = new ContentValues();
                values2.put("name", String.valueOf(mUpdateStuNameText.getText()));
                values2.put("class", String.valueOf(mUpdateStuClassText.getText()));
                db.update("student", values2, "name=?", new String[]{mUpdateStuNameText.getText().toString()});
            }
        });

(4)查

需要cursor,cursor内部就像手指,总是指向查询的某个地方。因此,要从cursor中取出数据,首先要调用moveToFirst()方法移动虚拟手指指向第一个元素。读取行记录后,再调用moveToNext()方法,读取下一行记录,直到isAfterLast()说没有数据可取为止。最后,别忘了调用Cursor的close()方法关闭它。

query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy,String limit)

query方法中limit可以没有,方法的参数含义:

  • table:表名。
  • columns:要查询出来的列名。
  • selection:查询条件子句。
  • selectionArgs:查询条件子句的值。
  • groupBy:分组。
  • having:分组后聚合的过滤条件。
  • orderBy:排序。
  • limit:指定偏移量和获取的记录数。

要查哪个人是哪个班的,改selection和selectionArgs的值,比如

Cursor cursor = db.query("student", null, "name=?", new String[]{mQueryText.getText().toString()}, null, null, null);

完整:

 mQueryButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Cursor cursor = db.query("student", null, "name=?", new String[]{mQueryText.getText().toString()}, null, null, null);
                StringBuilder text = new StringBuilder();;
                cursor.moveToFirst();
                while (!cursor.isAfterLast()) {
                    String StuName = cursor.getString(cursor.getColumnIndex("name"));
                    String StuClass = cursor.getString(cursor.getColumnIndex("class"));
                    text.append(StuName).append("\t").append(StuClass).append("\n");
                    cursor.moveToNext();
                }
                cursor.close();
                mShowTextView.setText(text);
            }
        });