Android数据持久化SQLite碎碎念

版权声明:本文出自门心叼龙的博客,转载请注明出处。 https://blog.csdn.net/geduo_83/article/details/86559864

 本文为自己多年来在Android实战开发过程中总结归纳的一些常见问题,现在分享出来希望对初学者有所帮助。

本文出自门心叼龙的博客,转载请注明出处: https://blog.csdn.net/geduo_83/article/details/86559864 

目录

1. SQLite数据表都有哪些常见的数据类型?

2. 常见的增删改查语句?

3. 常见错误?

4. 数据库升级技巧?

5.SQLite使用时一般架构?


1. SQLite数据表都有哪些常见的数据类型?

  • 1.1 自增Integer主键

       id integer PRIMARY KEY autoincrement

  • 1.2 字符串数据类型

       content varchar(64)  DEFAULT '0'

  • 1.3 超文本类型

       content text

  • 1.4 时间类型

      addTime datetime default (datetime('now','localtime'))

2. 常见的增删改查语句?

  • 2.1 创建数据库

    复写SQLiteOpenHelper的构造方法:

private TrackDBManager(Context context) {
     this(context, mDBName, null, VERSION);
}
  • 2.2 创建表

 在onCreate方法里创建表

db.execSQL("create table track (vid varchar(64),trackid varchar(64),tracktime varchar(20),latlngs text)");
  • 2.3 修改表
String sq11 = "alter TABLE " + HIS_QUERY + " add lat varchar(64) DEFAULT '0'";
db.execSQL(sq11);
  • 2.4 增删改查语句

带占位符用?代替,参数的值按照?的顺序放入Object数组即可,也可以?直接用参数值替换即可

  • "insert into student(name,age,sex,class) values(?,?,?,?)", new Object[]{name, age, sex, whichclass}
  • "delete from student where name=?",new Object[]{name})
  • "update student set age=?, sex=?,class=? where name=?",new Object[]{age, sex, whichclass, name}
  • Cursor cursor = db.rawQuery("select age,sex,class from student where name=?",  
  • new String[]{name});         
 if(cursor.moveToNext()){
            StudentInfo info = new StudentInfo();
            info.setAge(cursor.getInt(0));
            info.setSex(cursor.getString(1));
            info.setWhichclass(cursor.getString(2));
            return info;
        }
cursor.close();  

3. 常见错误?

  • 3.1 数据库名称不带.db的后缀导致某些机型创建数据库时Crash
  • 3.2 插入数据是字段内容过长而导致的Crash,尽量使用非SQL语句来完成对数据库的操作
  • 3.3 修改表时增加多个字段时导致的Crash,多个字段分别添加即可

4. 数据库升级技巧?

  • 4.1 在onCreate方法里创建表
@Override
public void onCreate(SQLiteDatabase db) {
      db.execSQL(CREATE_QUERY_HIS);
      final int FIRST_DATABASE_VERSION = 1;
      onUpgrade(db, FIRST_DATABASE_VERSION, version);
}
  • 4.2 在onUpgrade方法里实现升级逻辑 
@Override
   public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
      // 使用for实现跨版本升级数据库
      for (int i = oldVersion; i < newVersion; i++) {
         switch (i) {
            case 1:
               String sql = "alter TABLE " + HIS_QUERY + " add searchtype integer DEFAULT 0";
               db.execSQL(sql);
               break;
            case 2:
               String sql1 = "alter TABLE " + HIS_QUERY + " add addTime datetime";
               db.execSQL(sql1);
            default:
               break;
         }
}

5.SQLite使用时一般架构?

架构1:

  • 5.1 底层SQLiteOpenHelper创建数据库,创建表
  • 5.2 DAO层来完成增删改查的操作,这样避免了数据库中表过多而导致的代码冗余的问题

架构2:

猜你喜欢

转载自blog.csdn.net/geduo_83/article/details/86559864