使用Javaxa0annotation和反射…
這種情況在日常開發(fā)中會遇到:
多種類型的對象需要保存在數(shù)據(jù)庫中,每種類型的對象都要建立一個表格,創(chuàng)建表格時的字段、檢索號碼、字段類型都要一一對應(yīng),
如果存儲在數(shù)組中,當(dāng)需要調(diào)整字段時,需要更改數(shù)組。第一,很繁瑣;第二,編號容易出錯,導(dǎo)致程序運行錯誤;第三,很難重用代碼。
為解決以上幾個問題,在實踐探索中想出了通過annotation解決的辦法。
其原理是:
創(chuàng)建表時:需要表名、字段名、字段類型
存儲數(shù)據(jù)時:需要表名、字段名、字段對應(yīng)數(shù)值。
獲取數(shù)據(jù)時:需要表名、字段檢索、存儲值變量
只需提供上述操作所需的信息,即可操作。這些數(shù)據(jù)中的一些可以通過類信息獲得,而另一些可以通過annotation傳輸。
創(chuàng)建annotation類,只要這個annotation類修飾的成員變量被認(rèn)為是需要保存在表格中的。
代碼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"這是一個自己的協(xié)議,當(dāng)檢查到這個字符串時,自動使用變量名作為字段名,否則使用指定名稱作為字段名。
建立一個要保存在數(shù)據(jù)庫中的普通類別:
代碼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標(biāo)記的_default,并且都使用了初始值,那么在表格中就會建立一個名為field_all這個變量值存儲在_default字段中。
會員變量field_specified_primary用annotation標(biāo)注_key,并指定為主key,不能為空,并指定了其他字段的specified_field_name。
成員變量not_db如果沒有標(biāo)注_field,則不會被存儲。
創(chuàng)建一個數(shù)據(jù)庫操作輔助類,在這個類的函數(shù)中讀取上面的標(biāo)記信息,并根據(jù)標(biāo)記信息進行處理。
3.1 創(chuàng)建表格:
代碼Java
1. private void createTbl(SQLiteDatabase db, String tblName, Class
本文僅代表作者觀點,版權(quán)歸原創(chuàng)者所有,如需轉(zhuǎn)載請在文中注明來源及作者名字。
免責(zé)聲明:本文系轉(zhuǎn)載編輯文章,僅作分享之用。如分享內(nèi)容、圖片侵犯到您的版權(quán)或非授權(quán)發(fā)布,請及時與我們聯(lián)系進行審核處理或刪除,您可以發(fā)送材料至郵箱:service@tojoy.com


