Sqlite

作者: 金馆长说 | 来源:发表于2017-03-16 13:04 被阅读9次

    Sqlite是Android内置的一个轻量级数据库,具备和普通数据库的、增删改查、和事物的功能。

    • 使用
      public class TestSqlHelper extends SQLiteOpenHelper {
          private static final int DB_VERSION = 1;//版本号
          private static final String DB_NAME = "myTest.db";//数据库名称
          public static final String TABLE_NAME = "Orders";
    
    
          public TestSqlHelper(Context context) {
              super(context, DB_NAME, null, DB_VERSION);//调用super创建数据库
          }
    
    
          @Override
          public void onCreate(SQLiteDatabase sqLiteDatabase) {
              Log.i("jinwie", "onCreate");
              String sql = "create table if not exists " + TABLE_NAME +
                      " (Id integer primary key, CustomName text, OrderPrice integer, Country text)";
              sqLiteDatabase.execSQL(sql);
          }
    
    
    
          @Override
          public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
              Log.i("jinwie",
                      "onUpgrade**" + "oldVersion=" + oldVersion + "----newVersion=" +
                              newVersion);
              String sql = "DROP TABLE IF EXISTS " + TABLE_NAME;
              sqLiteDatabase.execSQL(sql);
              onCreate(sqLiteDatabase);
          }
      }
    
    
    
      public class SqlDao {
          private Context mContext;
          private TestSqlHelper mTestSqlHelper;
          SQLiteDatabase db;
    
    
          public SqlDao(Context context) {
              this.mContext = context;
              mTestSqlHelper = new TestSqlHelper(context);
              db = mTestSqlHelper.getWritableDatabase();
              db.beginTransaction();
              db.execSQL("insert into " + TestSqlHelper.TABLE_NAME +
                      " (Id, CustomName, " +
                      "OrderPrice, Country) values (1, 'Arc', 100, 'China')");
              db.execSQL("insert into " + TestSqlHelper.TABLE_NAME +
                      " (Id, CustomName, OrderPrice, Country) values (2, 'Bor', 200, 'USA')");
              db.execSQL("insert into " + TestSqlHelper.TABLE_NAME +
                      " (Id, CustomName, OrderPrice, Country) values (3, 'Cut', 500, 'Japan')");
              db.execSQL("insert into " + TestSqlHelper.TABLE_NAME +
                      " (Id, CustomName, OrderPrice, Country) values (4, 'Bor', 300, 'USA')");
              db.execSQL("insert into " + TestSqlHelper.TABLE_NAME +
                      " (Id, CustomName, OrderPrice, Country) values (5, 'Arc', 600, 'China')");
              db.execSQL("insert into " + TestSqlHelper.TABLE_NAME +
                      " (Id, CustomName, OrderPrice, Country) values (6, 'Doom', 200, 'China')");
              db.setTransactionSuccessful();
          }
    
    

    关于数据库升级

    有时候我们设计数据库的时候不可能考虑的很全面,后期可能会对数据库添加表、增加和删除字段的操作。这个时候我们就需要升级数据库了。
    方案
    如果升级数据库需要保留老版本的数据库,这种情况需要用到 onUpgrade这个方法了,这是系统遇到数据库版本高于当前安装的数据库版本会调用的,我们可以在这个方法里面进行数据库的逻辑操作。 一般来说升级数据库无非就是增加修改字段和表结构,简单点我们可以直接使用 SQL来添加新字段,如果是新表那么久在对应的版本去执行创建新表的逻辑。 或者直接把老表的数据插入新表,然后在删除旧表。

    方案添加新表|新增字段:version 1<2
    创建新表然后把原先表里面的数据重新插入到表中,新加字段给定默认值,然后在删除旧表。 或者直接添加一个新的字段这样不会影响老的数据

    方案添加新表|跨版本升级:version 1<3
    这种情况onUpgrade会调用多次,给定多个判断然后进行版本的处理

      
    
        @Override
          public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion) {
             switch (newVersion) {
                case 2:
                    db.execSQL(create3);
                    break;
                case 1:
                    db.execSQL(create2);
                    break;
          }
    
    

    使用LitePal框架进行数据库的操作

    https://github.com/LitePalFramework/LitePal

    数据库升级文章

    相关文章

      网友评论

          本文标题:Sqlite

          本文链接:https://www.haomeiwen.com/subject/vjtjnttx.html