Android用标注管理数据库的简单示例
来源:互联网 发布:擎洲广达计价软件 编辑:程序博客网 时间:2024/06/01 10:03
现在市面上有很多利用标注操作数据库的源码和框架,这里我简单示例一下。
- 新建标注
@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface Column { String name(); String type(); boolean isPID() default false;}
- 创建简单的SqlHelper
public class DbHelper extends SQLiteOpenHelper { private SQLiteDatabase mDb; public DbHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); if (mDb == null) { mDb = context.openOrCreateDatabase(name, version, factory); } } @Override public void onCreate(SQLiteDatabase db) { } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } public void createTable(String sql){ mDb.execSQL(sql); } public SQLiteDatabase getDB(){ return mDb; }}
- 创建核心工具类
public class DBUtils { private static DBUtils instance; private DbHelper mDbHelper; private DBUtils(DbHelper helper){ mDbHelper = helper; } public static DBUtils getInstance(Context context){ if(instance == null){ instance = new DBUtils(new DbHelper(context, "test.db", null, 1)); } return instance; } //利用标注创建数据库 public void createTable(Class clazz){ StringBuilder sql = new StringBuilder("create table if not exists "); sql.append(clazz.getSimpleName()); sql.append("("); for(Field field : clazz.getDeclaredFields()){ if(field.isAnnotationPresent(Column.class)){ Column column = field.getAnnotation(Column.class); String cname = column.name(); sql.append(cname); sql.append(" "); sql.append(column.type()); if(column.isPID()){ sql.append(" "); sql.append("PRIMARY KEY "); } sql.append(","); } } sql.deleteCharAt(sql.length() - 1); sql.append(");"); Log.e("zxdxp8l", sql.toString()); mDbHelper.createTable(sql.toString()); } // 下面两个方法就不用标注的了,就是写个demo看一下结果,觉得用stetho麻烦的可以用这个, // hardcode一个插入 public void insert(Student stu){ Random r = new Random(10000); String sql = "INSERT INTO Student (id,name,age) VALUES ("+1+", 'zx',"+ 25+")"; mDbHelper.getDB().execSQL(sql); } // hardcode一个select public void search(){ String sql = "Select id, name, age from Student"; Cursor cr = mDbHelper.getDB().rawQuery(sql, null); if (cr.moveToFirst()) { for (int i = 0; i < cr.getCount(); i++) { String ret = cr.getInt(0) + "," + cr.getString(1) + "," + cr.getInt(2); Log.e("zxdxp8l", ret); } } }}
- 实例类
public class Student { // 实例类的属性都用上标注啦 @Column(name = "id", type = "INT", isPID = true) private int id; @Column(name = "name", type = "TEXT") private int name; @Column(name = "age", type = "INT") private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public int getName() { return name; } public void setName(int name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
- 调用
DBUtils.getInstance(this).createTable(Student.class);
前面写那么多,就是为了这一下的爽快,以后创建新表的时候,直接写上标注用这句话就可以了,节约了大量的时间和少写了很多代码,而且还不容易出错。现在也有很多很强大的轻量级的第三方,比如LitePal这些开源的东西,基本原理也就和这个示例差不多。
阅读全文
0 0
- Android用标注管理数据库的简单示例
- spring2.5 + hibernate3.2 标注(annotation)开发的简单示例
- android简单的数据库使用查询操作示例
- 简单的数据库操作示例
- android JNI 的简单示例
- android GridView的简单示例
- [Android]RecyclerView的简单示例
- 简单的数据库管理--通讯录
- java读取ACCESS数据库的简单示例
- java连接ACCESS数据库的简单示例
- sqlite3 数据库的简单实用示例
- 动态切换数据库数据源的简单示例
- python实现数据库查询的简单示例
- Java连接Oracle数据库的简单示例
- 数据库操作简单示例
- android 常用的listview管理示例
- Qt用QML调用Android的摄像头简单示例
- MAMP链接数据库并且对数据库操作的简单示例
- 说说ES6 Class里面的this对象
- Alpha,Beta,RC,GA版本解释
- 丢棋子问题
- oracle下mybatis批量下载的问题
- Python生成PASCAL VOC格式的xml标注文件
- Android用标注管理数据库的简单示例
- .net总结(二)
- Improving Linux kernel networking performance 笔记
- Android 开发之漫漫长途 Ⅲ—Activity 的显示之 Window和View(2)
- HTTP(三)
- expected unqualified-id before '(' token
- spring boot ActiveMQ学习
- 事件监听
- MySQL中创建数据库时的一些属性