日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 通过反射让SQlite建表

發布時間:2025/7/14 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 通过反射让SQlite建表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.我們寫一個DBHelper繼承自SQLiteOpenHelper

public class DBHelper extends SQLiteOpenHelper{//數據庫的版本private final static int DB_VERSION = 1;//數據庫名private final static String DB_NAME = "ladeng.db";private Context mContext;//我們直接用super調用父類的構造方法,這樣我們在實例化DBHelper的時候只需要傳入一個上下文參數就可以了public DBHelper(Context context) {super(context, DB_NAME, null, DB_VERSION);this.mContext = context;}//數據庫不存在的時候,調用這個方法 @Overridepublic void onCreate(SQLiteDatabase db) {createTables(db,0,0);}//版本號發生變化的時候,調用這個方法 @Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {//1.刪除原來的表//2.調用onCreate重新創建數據庫 }/*** 建表語句,只需要一行就能建一個表*/private void createTables(SQLiteDatabase db, int oldVersion, int newVersion) {//createTable(Movie.class)返回的是sql建表語句//db.execSQL(sql) 執行這條建表語句db.execSQL(createTable(Movie.class));}/*** 如果沒傳表明的話,默認使用類名作為表明* @param clazz 實體類* @return*/private <T> String createTable(Class<T> clazz){return createTable(clazz, clazz.getSimpleName());}/*** 真正的建表方法* @param clazz 實體類* @param tableName 表明* @return sql建表語句*/private <T> String createTable(Class<T> clazz , String tableName){//實例化一個容器,用來拼接sql語句StringBuffer sBuffer = new StringBuffer();//sql語句,第一個字段為_ID 主鍵自增,這是通用的,所以直接寫死sBuffer.append("create table if not exists "+ tableName + " "+"(_ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,");//得到實體類中所有的公有屬性Field[] fields = clazz.getFields();//遍歷所有的公有屬性for(Field field : fields){//如果屬性不為_id的話,說明是新的字段if (!field.getName().equals("_id")) {//得到屬性的基本數據類型String type = field.getType().getSimpleName();//如果是String類型的屬性,就把字段類型設置為TEXTif (type.equals("String")) {sBuffer.append(field.getName()+" TEXT,");//如果是int類型的屬性,就把字段類型設置為INTEGER}else if (type.equals("int")) {sBuffer.append(field.getName()+" INTEGER,");}}}//將最后的逗號刪除sBuffer.deleteCharAt(sBuffer.length()-1);//替換成); 表明sql語句結束sBuffer.append(");");//返回這條sql語句return sBuffer.toString();}}

2.Movie實體類,實體類中的屬性就是表中的字段

public class Movie {public String title;public int rating;public String year;public String genre;public String country;public int price; }

3.在MainActivity.java中添加如下代碼

public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//實例化我們的DBHelperDBHelper dbHelper = new DBHelper(this);//調用了這個方法后,DBHelper中的onCreate才會執行 dbHelper.getReadableDatabase();} }

4.我們在data/data/包名/databases/ladeng.db中查看表是否已經建好

轉載于:https://www.cnblogs.com/wei1228565493/p/4654437.html

總結

以上是生活随笔為你收集整理的Android 通过反射让SQlite建表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。