使用Javaxa0annotation和反射…
这种情况在日常开发中会遇到:
多种类型的对象需要保存在数据库中,每种类型的对象都要建立一个表格,创建表格时的字段、检索号码、字段类型都要一一对应,
如果存储在数组中,当需要调整字段时,需要更改数组。第一,很繁琐;第二,编号容易出错,导致程序运行错误;第三,很难重用代码。
为解决以上几个问题,在实践探索中想出了通过annotation解决的办法。
其原理是:
创建表时:需要表名、字段名、字段类型
存储数据时:需要表名、字段名、字段对应数值。
获取数据时:需要表名、字段检索、存储值变量
只需提供上述操作所需的信息,即可操作。这些数据中的一些可以通过类信息获得,而另一些可以通过annotation传输。
创建annotation类,只要这个annotation类修饰的成员变量被认为是需要保存在表格中的。
代码Java
1.
2. @Target(ElementType.FIELD)
3. @Retention(RetentionPolicy.RUNTIME)
4. public @interface DbField {
5. boolean primaryKey() default false;
6. boolean notNull() default false;
7. String fieldName() default "##default";
8. }
代码里的"##default"这是一个自己的协议,当检查到这个字符串时,自动使用变量名作为字段名,否则使用指定名称作为字段名。
建立一个要保存在数据库中的普通类别:
代码Java
1. public class SomeThing {
2. @DbField
3. public String field_all_default;
4.
5. @DbField (
6. primaryKey = true,
7. notNull = true,
8. fieldName = "specified_field_name"
9. )
10. public long field_specified_primary_key;
11.
12. @DbField
13. public boolean field_boolean;
14.
15. public int not_db_field;
16. }
public class SomeThing { @DbField public String field_all_default;
@DbField (
primaryKey = true,
notNull = true,
fieldName = "specified_field_name"
)
public long field_specified_primary_key;
@DbField
public boolean field_boolean;
public int not_db_field;
}
以上代码:
会员变量field_all使用annotation标记的_default,并且都使用了初始值,那么在表格中就会建立一个名为field_all这个变量值存储在_default字段中。
会员变量field_specified_primary用annotation标注_key,并指定为主key,不能为空,并指定了其他字段的specified_field_name。
成员变量not_db如果没有标注_field,则不会被存储。
创建一个数据库操作辅助类,在这个类的函数中读取上面的标记信息,并根据标记信息进行处理。
3.1 创建表格:
代码Java
1. private void createTbl(SQLiteDatabase db, String tblName, Class
本文仅代表作者观点,版权归原创者所有,如需转载请在文中注明来源及作者名字。
免责声明:本文系转载编辑文章,仅作分享之用。如分享内容、图片侵犯到您的版权或非授权发布,请及时与我们联系进行审核处理或删除,您可以发送材料至邮箱:service@tojoy.com