利用反射,创建Android的SQL语句,极大提高速率

来源:互联网 发布:免费网站群发软件 编辑:程序博客网 时间:2024/05/22 12:38

所有表类的父类

public class Table {public static final String prefix = "COLUMN_";public static final String _ID = "_id";public String TABLE_NAME;public String getTABLE_NAME() {return TABLE_NAME;}public void setTABLE_NAME(String tABLE_NAME) {TABLE_NAME = tABLE_NAME;}/** * 通过反射来创建创建表格的SQL语句 *  * @param tabled *            要生成SQL语句的表格对象,列的属性都是TEXT类型 * @return SQLite中创建该表格的SQL语句 */public String createTableSQL() {final String TEXT_TYPE = " TEXT";final String COMMA_SEP = ",";StringBuilder sql = new StringBuilder();sql.append("CREATE TABLE ").append(this.getTABLE_NAME()).append(" (").append(_ID).append(" INTEGER PRIMARY KEY,");Field[] fields = getClass().getDeclaredFields();for (int i = 0; i < fields.length; i++) {if (fields[i].getName().startsWith(prefix)) {try {sql.append((String) fields[i].get(this)).append(TEXT_TYPE).append(COMMA_SEP);} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}}// sql这时的形式为“...,column_name value,)” 删除最后多出的“,”sql.deleteCharAt(sql.length() - 1);return sql.append(")").toString();}}

表格类
public abstract class DataBaseMetaData {public static final String DB_NAME = "bean_counpon.db";private DataBaseMetaData() {};public static class TableUser extends Table {public static final String TABLE_NAME = "user";public String getTABLE_NAME() {return TABLE_NAME;}public static final String COLUMN_NAME = "name";public static final String COLUMN_PASS_WORD = "pass_word";public static final String COLUMN_GENDER = "gender";public static final String COLUMN_TEL = "tel";public static final String COLUMN_QQ = "qq";public static final String COLUMN_EMAIL = "email";public static final String COLUMN_START_TIME = "start_time";}}

结果:

以后想生成那个表格的SQL语句,直接调用database.execSQL(new TableUser().createTableSQL());

0 0
原创粉丝点击