Android SQLite数据库的创建及两种方式实现增删改查

一,SQLite简介

也是使用SQL语句,操作数据库的;也是关系型数据库的一种;特点:运算速度快,占用资源少;

二,创建SQLiteOpenHelper

Android使用SQLite数据库,就必须继承SQLiteOpenHelper,而且必须实现三个方法,这三个方法缺一不可,是固定的形式;一个是构造函数(一般是四个参数的构造),onCreate,onUpgrade;

public class DBHelper extends SQLiteOpenHelper {
    public DBHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //创建表的SQL语句
        String table = "create table user(id int ,name varchar(20))";
        db.execSQL(table);
        Log.d("","数据库创建了");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.d("","数据库升级 了");
    }
}

构造函数四个参数:

  • Context:上下文,这个相信都知道
  • name:就是要创建的数据库名字;
  • CursorFactory:游标工厂,相当于结果集;传参的时候一般传入null,系统默认使用默认的Cursor;
  • version:版本号,当version改变时就会调用onUpgrade方法升级;注意版本号不能回退;

三,创建数据库

创建数据库对象;

public class TestDB extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //创建数据库  名字可以不带.db,为了增加可读性,最好加上.db
        DBHelper helper = new DBHelper(this, "login.db", null, 1);

        //如果数据库不存在,则创建数据库,然后获取可读可写的数据库对象,如果存在,直接打开;
        SQLiteDatabase writableDatabase = helper.getWritableDatabase();
        //如果存储空间满了,获取一个只读数据库对象;
        SQLiteDatabase readableDatabase = helper.getReadableDatabase();
    }
}

四,创建表

一般时创建数据库的时候创建表,而且数据库一但创建成功onCreate方法就不会在调用;所以一般在再onCreate方法中创建表;

五,CRUD

直接SQL语句执行增删改查;SQL语句不清楚可以查看这篇文章,详细介绍了CRUD的使用https://blog.csdn.net/ezconn/article/details/103840699

增(插入数据)

public void insert() {
    DBHelper helper = new DBHelper(this, "user.db", null, 1);
    //如果数据不存在,则创建数据,然后获取可读可写的数据库对象,如果存在,直接打开;
    SQLiteDatabase writableDatabase = helper.getWritableDatabase();

    writableDatabase.execSQL("insert into user(id,name,phone) values(?,?,?)", new Object[]{1, "藏三","13888"});
    writableDatabase.execSQL("insert into user(id,name,phone) values(?,?,?)", new Object[]{2, "李四","15888"});
    writableDatabase.execSQL("insert into user(id,name,phone) values(?,?,?)", new Object[]{3, "王五","16888"});
    writableDatabase.execSQL("insert into user(id,name,phone) values(?,?,?)", new Object[]{4, "赵六","17888"});
    writableDatabase.close();
}

删除数据 

private void delete() {
    DBHelper helper = new DBHelper(this, "user.db", null, 1);
    //如果数据不存在,则创建数据,然后获取可读可写的数据库对象,如果存在,直接打开;
    SQLiteDatabase writableDatabase = helper.getWritableDatabase();

    writableDatabase.execSQL("delete from user where name = ?", new Object[]{"藏三"});
    writableDatabase.close();
}

 修改数据

private void update() {
    DBHelper helper = new DBHelper(this, "user.db", null, 1);
    //如果数据不存在,则创建数据,然后获取可读可写的数据库对象,如果存在,直接打开;
    SQLiteDatabase writableDatabase = helper.getWritableDatabase();

    writableDatabase.execSQL("update user set id = ? where name = ?", new Object[]{6,"王五"});
    writableDatabase.close();
}

 查询数据

private void select() {
    DBHelper helper = new DBHelper(this, "user.db", null, 1);
    //如果数据不存在,则创建数据,然后获取可读可写的数据库对象,如果存在,直接打开;
    SQLiteDatabase writableDatabase = helper.getWritableDatabase();
    Cursor cursor = writableDatabase.rawQuery("select name from user",null);
    while (cursor.moveToNext()) {
        String name = cursor.getString(cursor.getColumnIndex("name"));
        Log.d("查询name的值:", name);
    }
    writableDatabase.close();
}

SQLite Android API操作增删改查(CRUD)

增加数据

    public void insertApi() {
        DBHelper helper = new DBHelper(this, "user.db", null, 1);
        //如果数据库不存在,则创建数据,然后获取可读可写的数据库对象,如果存在,直接打开;
        SQLiteDatabase db = helper.getWritableDatabase();
        //把插入的数据全部封装到ContentValues对象中
        ContentValues values = new ContentValues();
        values.put("id",10);
        values.put("name","阿龙");
        values.put("phone","11112233");
        db.insert("user", null, values);
    }

删除数据

private void deleteApi() {
        DBHelper helper = new DBHelper(this, "user.db", null, 1);
        //如果数据不存在,则创建数据,然后获取可读可写的数据库对象,如果存在,直接打开;
        SQLiteDatabase db = helper.getWritableDatabase();
        
        //删除name=阿龙 id=10的记录
        db.delete("user","name =? and id = ?",new String[]{"阿龙","10"});
}

修改数据

private void updateApi() {
     DBHelper helper = new DBHelper(this, "user.db", null, 1);
     //如果数据不存在,则创建数据,然后获取可读可写的数据库对象,如果存在,直接打开;
     SQLiteDatabase db = helper.getWritableDatabase();
     ContentValues values = new ContentValues();
     values.put("name", "张三丰");
     //修改id=1的记录中的name = 张三丰
     db.update("user", values, "id = ?", new String[]{"1"});
 }

查询数据

查询表中所有数据

private void selectApi() {
     DBHelper helper = new DBHelper(this, "user.db", null, 1);
     //如果数据不存在,则创建数据,然后获取可读可写的数据库对象,如果存在,直接打开;
     SQLiteDatabase db = helper.getWritableDatabase();

     //查询数据所有数据
     Cursor cursor = db.query("user", null, null, null, null, null, null,null);

     while (cursor.moveToNext()) {
          String name = cursor.getString(cursor.getColumnIndex("name"));
          String phone = cursor.getString(cursor.getColumnIndex("phone"));
          Log.d("查询name的值:", name + " phone: " + phone);
     }
}

方法及参数说明

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

各个参数的意义说明:
table:表名称
columns:列名称数组
selection:条件语句,相当于where
selectionArgs:条件字句,参数数组
groupBy:分组列
having:分组条件
orderBy:排序列
limit:分页查询限制
Cursor:返回值,相当于结果集ResultSet

事务

SQLite也是支持事务的

总结

SQLite不检查数据类型,都是以字符串的形式存入数据库的;会存在隐患,使用的过程中一定规范数据类型;

猜你喜欢

转载自blog.csdn.net/ezconn/article/details/108655624