From f172a56a90a94dcb9ffe5c1d2a60cfafb4e2b386 Mon Sep 17 00:00:00 2001 From: 张道锋 <1050130019@qq.com> Date: Wed, 28 Mar 2018 18:06:22 +0800 Subject: [PATCH] no message --- app/src/main/assets/migrations/1.sql | 4 ++-- app/src/main/java/com/shunzhi/parent/annotation/AddColumn.java | 19 +++++++++++++++++++ app/src/main/java/com/shunzhi/parent/annotation/VersionHelper.java | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ app/src/main/java/com/shunzhi/parent/annotation/VersionTest.java | 16 ++++++++++++++++ 4 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/shunzhi/parent/annotation/AddColumn.java create mode 100644 app/src/main/java/com/shunzhi/parent/annotation/VersionHelper.java create mode 100644 app/src/main/java/com/shunzhi/parent/annotation/VersionTest.java diff --git a/app/src/main/assets/migrations/1.sql b/app/src/main/assets/migrations/1.sql index 286bd95..a23d093 100644 --- a/app/src/main/assets/migrations/1.sql +++ b/app/src/main/assets/migrations/1.sql @@ -1,3 +1,3 @@ ALTER table message add COLUMN test TEXT -UPDATE message SET test = 'sql默认' WHERE tes t= NULL--试过了,执行了,但是没有结果,并没有更新数据库内容,可以使用下面的语句代替 尽量不要使用注释 -UPDATE message SET test = '' WHERE tes t= NULL \ No newline at end of file +UPDATE message SET test = 'sql默认' WHERE test= NULL--试过了,执行了,但是没有结果,并没有更新数据库内容,可以使用下面的语句代替 尽量不要使用注释 +UPDATE message SET test = '' WHERE test= NULL diff --git a/app/src/main/java/com/shunzhi/parent/annotation/AddColumn.java b/app/src/main/java/com/shunzhi/parent/annotation/AddColumn.java new file mode 100644 index 0000000..7c1de6b --- /dev/null +++ b/app/src/main/java/com/shunzhi/parent/annotation/AddColumn.java @@ -0,0 +1,19 @@ +package com.shunzhi.parent.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Created by 10501 on 2018/3/28.
+ * 升级数据库版本使用,在新加字段时添加此注解
+ * 只写了int类型和String类型的,其他需要的话自己写吧
+ * 如果我没写完,谁想用谁写吧 + * + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface AddColumn { + int version(); +} diff --git a/app/src/main/java/com/shunzhi/parent/annotation/VersionHelper.java b/app/src/main/java/com/shunzhi/parent/annotation/VersionHelper.java new file mode 100644 index 0000000..187b0cf --- /dev/null +++ b/app/src/main/java/com/shunzhi/parent/annotation/VersionHelper.java @@ -0,0 +1,50 @@ +package com.shunzhi.parent.annotation; + +import android.text.TextUtils; +import android.util.SparseArray; + +import org.greenrobot.greendao.annotation.Entity; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; + +import timber.log.Timber; + +/** + * Created by 10501 on 2018/3/28. + */ + +public class VersionHelper { + private static final String sql_insert = "ALTER table %s INSERT ADD COLUMN %s %s"; + private static final String sql_update = "UPDATE table message SET %s = '%s' WHERE %s = '%s'"; + + public static SparseArray> init(Class clazz,String dbName) { + SparseArray> array = new SparseArray<>(); + Field[] fields = clazz.getDeclaredFields(); + for (Field field : fields) { + AddColumn column = field.getAnnotation(AddColumn.class); + if (column != null) { + Timber.i("---==== :fieldName= %s version :%s fieldClass : %s", field.getName() + , column.version(), field.getType()); + Integer version = column.version(); + List sqlList = array.get(version); + if (sqlList == null) { + sqlList = new ArrayList<>(); + array.put(version, sqlList); + } + if (field.getType().getSimpleName().equalsIgnoreCase("string")) { + String sql = String.format(sql_insert, dbName, field.getName(), "TEXT"); + sqlList.add(sql); + } else if ("integer".equalsIgnoreCase(field.getType().getSimpleName())) { + String sql = String.format(sql_insert, dbName, field.getName(), "INTEGER"); + sqlList.add(sql); + } else { + //其他类型使用到的时候再写 + Timber.i("类型检测失败"); + } + } + } + return array; + } +} diff --git a/app/src/main/java/com/shunzhi/parent/annotation/VersionTest.java b/app/src/main/java/com/shunzhi/parent/annotation/VersionTest.java new file mode 100644 index 0000000..f2eb7e9 --- /dev/null +++ b/app/src/main/java/com/shunzhi/parent/annotation/VersionTest.java @@ -0,0 +1,16 @@ +package com.shunzhi.parent.annotation; + +/** + * Created by 10501 on 2018/3/28. + */ + +public class VersionTest { + @AddColumn(version = 1) + private String name; + + @AddColumn(version = 2) + Integer age; + + String area; + +} -- libgit2 0.21.0