Android 通过反射让SQlite建表
生活随笔
收集整理的這篇文章主要介紹了
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建表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 挨踢(IT)脱口秀--2014年2015
- 下一篇: 问题-[Delphi]MainFrame