Android SQLite 数据库创建,增删改查,升级数据库,SD卡中的数据库操作,多表查询操作

项目源码地址: https://github.com/JackLittlePig/NewsApp

简单创建:

 String STUDUENT_TABLE_NAME = "student";        //学生表名

    String CREATE_STUDENT_TABLE = "create table "
            + STUDUENT_TABLE_NAME
            + "("
            + "id integer primary key autoincrement "
            + ","
            + "name varchar(20)"
            + ","
            + "age integer"
            + ","
            + "classname varchar(20)"
            + ")";
public class SysDBHelper extends SQLiteOpenHelper {


    public SysDBHelper(Context context) {
        super(context, "defult_test.db", null, 2);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(SQLiteCommand.CREATE_STUDENT_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

一个Helper就够了
构造方法 中填写数据库名,以及数据库的版本

insert数据:

SQLiteDatabase db = mDBHelper.getReadableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("name", student.name);
contentValues.put("age", student.age);
contentValues.put("classname", student.className);
db.insert(SQLiteCommand.STUDUENT_TABLE_NAME, null, contentValues);
db.close();

可以通过 ContentValues put数据,然后根据表名,将数据插入进去
db.insert第二个参数的意思是:当你知道插入进去的时候是空的时候,那么至少,要指定一个列名,数据库自动插入null字符.因为SQLite不允许插入一条 完全空 的数据进去,这个参数一般是 用不到 的.

delete数据:

SQLiteDatabase db = mDBHelper.getWritableDatabase();
int delete = db.delete(SQLiteCommand.STUDUENT_TABLE_NAME
       , "name = ?", new String[]{name});
db.close();

通过第二个参数,编写删除条件,?是占位符,第三个参数是占位符的数据,根据顺序替代占位符.可以删除
返回值是删除的数量

Update数据:

 ContentValues contentValues = new ContentValues();
 contentValues.put("classname", className);
 SQLiteDatabase db = mDBHelper.getWritableDatabase();
 int update = db.update(SQLiteCommand.STUDUENT_TABLE_NAME
         , contentValues
         , "name = ?"
         , new String[]{name}
 );
 db.close();

是个增删的结合体,通过 ContentValues 将要修改的字段put进去,然后第三第四个参数,写 update 条件.用法与删除一样

Query数据:

SQLiteDatabase db = mDBHelper.getReadableDatabase();
Cursor cursor = db.query(
        SQLiteCommand.STUDUENT_TABLE_NAME
        , new String[]{"studentId", "name", "age", "classname"}  //查询的列
        , null          //查询条件 如:name = ?
        , null      //查询条件的值  如 张三
        , null
        , null
        , null);

List<Student> students = new ArrayList<>();
while (cursor.moveToNext()) {
    Student student = new Student();
    student.studentId = cursor.getInt(cursor.getColumnIndex("studentId"));
    student.name = cursor.getString(cursor.getColumnIndex("name"));
    student.age = cursor.getInt(cursor.getColumnIndex("age"));
    student.className = cursor.getString(cursor.getColumnIndex("classname"));
    students.add(student);
}

查询相对来说复杂点.第二个参数是要查询的结果字段.如果需要条件查询第三个参数和第四个参数用来写查询条件.用法与delete和update一样的.就不重复写了.
查询结果返回的是个 Cursor .
通过循环,将 Cursor 中的每条数据取出,并存储到需要的容器中

数据库升级:

public SysDBHelper(Context context) {
    super(context, SQL_FILE_NAME, null, DB_VERSION);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
   Log.d(TAG, "onUpgrade oldVersion = " + oldVersion + " , newVersion = " + newVersion);
   db.execSQL(SQLiteCommand.CREATE_TEACHER_TABLE);
   db.execSQL(SQLiteCommand.CREATE_CLASS_TABLE);
   db.close();
}

数据库升级需要2个操作.
第一步: 在 SQLiteOpenHelper构造方法中 ,改变第三个参数.是版本号,只可以改大不可以改小
第二步: 将数据库升级的代码,写在 onUpgrade 方法中, oldVersionnewVersion 是用来做检查判断的.根据新老版本号的不通,决定执行哪些内容.
需要注意的是: SQLite 数据库, 不支持列名修改删除 ,只能 增加.
如果一定要解决这个问题.方案如下:
1. 修改表名
2. 新建表
3. 将之前的表数据都挪到新表中

操作sd卡中的数据库:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值