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

