91无码视频一区|蜜臀福利在线观看|日韩一极黄色视频|色欲人妻少妇Av一区二区|婷婷香蕉视频欧美三级片黄色|一级A片刺激高潮|国产精品污污久久|日韩黄色精品日韩久久综合网|中国一级片电影在线|超碰乱码久久久免费

使用Javaxa0annotation和反射…

2023-05-22


這種情況在日常開(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