- 浏览: 252067 次
- 性别:
- 来自: 上海
最新评论
-
lazyox_2008:
多谢楼主配对那一段,解决了我的大问题啊
android蓝牙主动发起配对实例 -
yandol:
这个反射的createBond用法很有意思 这个代码能像非an ...
android蓝牙主动发起配对实例 -
hzxlb910:
例子还是短小看着一目了然。不错
初识AOP -
lteb2002:
在WEB中,是使用WebApplicationContext的 ...
[转]Spring中WebApplicationContext的研究 -
Mark_dev:
请问一下楼主,这个UUID是不是和设备有关啊,我使用你的 co ...
android蓝牙主动发起配对实例
为了以后的项目使用Android数据库更方便,自已写了一个小的应用框架,不知道算不算称得上框架,反正自已用起来觉得还是挺方便的,参考Hibernate了应用思想。
业务介绍
1、建一个数据库madfiger.db
2、建一个用户表UserInfo,包含一些用户基本字段
好了那么我们现在来实现吧
1、新建UserInfo实体类,继承AbstractBaseModel,UserInfo的类名为数据库表名,字段分别为实现了Get与Set方式的实性字段;
UserInfo代码如下:
package cn.company.android.project.model; import java.util.Calendar; import java.util.Date; import java.util.Locale; import cn.madfinger.android.core.AbstractBaseModel; import cn.madfinger.android.core.util.DateUtils; public class UserInfo extends AbstractBaseModel{ private static final long serialVersionUID = -7079062473198239915L; private String id; private String username; private String password; private String birthday; private int gender; private float weight; private Date createTime=DateUtils.long2Date(Calendar.getInstance(Locale.CHINESE).getTimeInMillis()); public UserInfo(){ super(); } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } public int getGender() { return gender; } public void setGender(int gender) { this.gender = gender; } public float getWeight() { return weight; } public void setWeight(float weight) { this.weight = weight; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } }
AbstractBaseModel代码如下:
package cn.madfinger.android.core; import java.io.Serializable; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import org.json.JSONObject; import android.util.Log; /** * 实体模型基类 * * @author wiley */ public abstract class AbstractBaseModel implements Serializable { private static final long serialVersionUID = -4685989463430616599L; private static String TAG = AbstractBaseModel.class.getSimpleName(); private static Map<String, String> TYPES = new HashMap<String, String>(); static { TYPES.put("date", "TEXT"); TYPES.put("string", "TEXT"); TYPES.put("integer", "INTEGER"); TYPES.put("int", "INTEGER"); TYPES.put("short", "INTEGER"); TYPES.put("long", "INTEGER"); TYPES.put("float", "REAL"); TYPES.put("double", "REAL"); } public AbstractBaseModel() { TAG = this.getClass().getSimpleName(); } public abstract String getId(); public abstract void setId(String id); public Set<String> toFieldSet(){ return this.toFieldMap().keySet(); } public Map<String, String> toFieldMap() { Map<String, String> fieldMap = new HashMap<String, String>(); Method[] methods = this.getClass().getMethods(); try { String propertyName; String typeString; for (Method method : methods) { String methodName = method.getName(); if (!methodName.startsWith("get") || methodName.equalsIgnoreCase("getClass") || methodName.equalsIgnoreCase("get")) continue; typeString = method.getReturnType().getSimpleName(); propertyName = methodName.substring(3); fieldMap.put(propertyName, typeString); } } catch (Exception e) { Log.e(TAG, e.getMessage()); } return fieldMap; } public String toCreateTableString() { StringBuilder sb = new StringBuilder(); sb.append("CREATE TABLE "); sb.append(this.getClass().getSimpleName()); sb.append(" ("); int i = 0; Map<String, String> fieldMap = toFieldMap(); Iterator<String> it = fieldMap.keySet().iterator(); while (it.hasNext()) { String field = (String) it.next(); String type = fieldMap.get(field).toLowerCase(); if (i++ != 0) sb.append(","); sb.append(field.toUpperCase()); sb.append(" " + (TYPES.containsKey(type)?TYPES.get(type):"NONE")); if (field.equalsIgnoreCase("id")) sb.append(" PRIMARY KEY"); } sb.append(");"); return sb.toString(); } public String toJSONString() { return this.toJSON().toString(); } public JSONObject toJSON() { Method[] methods = this.getClass().getMethods(); JSONObject json = new JSONObject(); Object propertyValue; String propertyName; try { for (Method method : methods) { String methodName = method.getName(); if (!methodName.startsWith("get") || methodName.equalsIgnoreCase("getClass") || methodName.equalsIgnoreCase("get")) continue; propertyValue = method.invoke(this, new Object[] {}); propertyName = methodName.substring(3); propertyName = Character.toLowerCase(propertyName.charAt(0)) + propertyName.substring(1); json.put(propertyName, propertyValue); } } catch (Exception e) { Log.e(TAG, e.getMessage()); } return json; } }
实体类新建后配置Sqlite.xml,此文件位与res/string下
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- 数据库版本 --> <string name="database_version">1</string> <!-- 数据库名称 --> <string name="database_name">madfinger.db</string> <!-- 数据表对应实列 --> <string-array name="model_beans"> <item>cn.company.android.project.model.UserInfo</item> </string-array> </resources>
在软件启动时new SqlitHelper,那么在数据库与表将被自动新建,若需要新建多张表的话只需要新建多个继承AbstractBaseModel类的实体类,并添加至sqlite.xml中即可
下面我再将sqlitHelper贴出来
package cn.madfinger.android.core; import java.util.LinkedList; import java.util.List; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; import cn.company.android.project.R; import cn.madfinger.android.core.util.StrUtils; /** * 数据库初始化 * @author wiley * */ public class SqliteHelper { private static final String TAG = SqliteHelper.class.getSimpleName(); private static SQLiteDatabase mWriterHandler; private static SQLiteDatabase mReaderHandler; private static int mVersion; private static String mDatabase; public static List<Class<? extends AbstractBaseModel>> mBeanList = new LinkedList<Class<? extends AbstractBaseModel>>(); private DatabaseHelper mDBHelper; @SuppressWarnings("unchecked") public SqliteHelper(Context context) { Log.i(TAG, "new SqliteHelper"); mVersion=StrUtils.str2int(context.getResources().getString(R.string.database_version), 1); mDatabase=StrUtils.null2string(context.getResources().getString(R.string.database_name), "madfinger.db"); String[] modelBeans=context.getResources().getStringArray(R.array.model_beans); if(null!=modelBeans){ for(String modelBean:modelBeans){ try { mBeanList.add((Class<? extends AbstractBaseModel>)Class.forName(modelBean)); } catch (ClassNotFoundException e) { Log.d(TAG, "",e); } } } //初始化数据库 if(null!=mBeanList&&mBeanList.size()>0){ mDBHelper = new DatabaseHelper(context); mWriterHandler=mDBHelper.getWritableDatabase(); } } public SQLiteDatabase getWriterHandler() { if(null==mWriterHandler) mWriterHandler=mDBHelper.getWritableDatabase(); return mWriterHandler; } public SQLiteDatabase getReaderHandler() { if(null==mReaderHandler) mReaderHandler=mDBHelper.getWritableDatabase(); return mReaderHandler; } public void release() { if (null != mWriterHandler) { mWriterHandler.close(); mWriterHandler = null; } if(null!=mReaderHandler){ mReaderHandler.close(); mReaderHandler=null; } } private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context,mDatabase , null, mVersion); } @Override public void onCreate(SQLiteDatabase db) { Log.i(TAG, "onCreate "); createTable(db); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.i(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data"); // 删除旧表格 deleteTable(db); // 创建新表 createTable(db); } @Override public void onOpen(SQLiteDatabase db) { super.onOpen(db); Log.i(TAG, "onOpen "); } /* * 创建所有表 */ private void createTable(SQLiteDatabase db) { Log.i(TAG, "createTable begin"); for(Class<? extends AbstractBaseModel> clazz:mBeanList){ try { String sqlString = clazz.newInstance().toCreateTableString(); Log.i(TAG, sqlString); db.execSQL(sqlString); } catch (IllegalAccessException e) { Log.e(TAG, "",e); } catch (InstantiationException e) { Log.e(TAG, "",e); } } Log.i(TAG, "createTable end"); } /* * 删除所有表 */ private void deleteTable(SQLiteDatabase db) { Log.i(TAG, "deleteTable begin"); String sql = "DROP TABLE IF EXISTS "; for(Class<? extends AbstractBaseModel> clazz:mBeanList){ Log.i(TAG, sql + clazz.getSimpleName()); db.execSQL(sql + clazz.getSimpleName()); } Log.i(TAG, "deleteTable end"); } } }
数据库操作将在后一章节中分享给大家
发表评论
-
android数据库操作(二)
2011-11-12 00:45 1455package cn.madfinger.android.co ... -
自定义组件—TabHost
2011-10-31 12:53 1613package cn.madfinger.android.co ... -
android蓝牙主动发起配对实例
2011-09-24 08:39 25435package cn.madfinger.core; i ... -
手机蓝牙客类服务对应的UUID
2011-09-23 20:43 2014ServiceDiscoveryServerServiceCl ... -
真机调式
2011-09-22 08:29 1150真机调试遇到的问题: 1、连接到真机后没有提示安装驱动,但发 ... -
常用URI
2011-09-08 09:36 619以下是常用到的Intent的URI及其示例,包含了大部分应用中 ... -
最给力的办公平台
2011-02-24 01:02 1555SUCANG协同采用AJAX、J2EE、MV ... -
DWR应用总结
2006-11-11 10:47 10000百事通信息网 配置调试: DWR的配置说明,网上已经是N多 ... -
[求教]关于DWR+Spring延迟加载的问题
2006-11-09 12:10 7083百事通信息网 今天用DWR+Spring做整合时,发现不能通 ... -
[转]Hibernate应用中如何处理批量更新和批量删除?
2006-11-02 10:36 10170百事通信息网 在Hibernate应用中如何处理批量更新和 ... -
初识AOP
2006-11-02 00:07 4334百事通信息网 学习Spring AOP之前,先来了 ... -
AOP的应用领域
2006-11-01 11:46 2518百事通信息网 AOP的应用领域: Authentica ... -
hibernate多表查询
2006-10-30 19:01 27133百事通信息网 我的demo小程序随着我学习的过程、 ... -
spring+hibernate之applicationContext.xml配置
2006-10-27 20:31 39656百事通信息网 最近一段时间潜心自学struts,spring ... -
Spring用回调HibernateCallBack方法
2006-10-27 20:28 7639百事通信息网 Spring用回调HibernateCall ... -
[转]Spring中WebApplicationContext的研究
2006-10-27 20:27 5886百事通信息网 作者:laoer 引自:http://b ... -
struts+spring整合测试
2006-10-27 20:24 6776百事通信息网 struts+spr ... -
将action得到的值,通过request显示到页面中
2006-10-27 20:13 2472百事通信息网 今天又遇到一个问题,将action ... -
WEB分页技术
2006-10-27 19:49 3903百事通信息网 web应用开发中,分页是一项很重要的技术,分 ... -
DWR+SPRING整合
2006-10-27 19:41 3493百事通信息网 Ajax,它 ...
相关推荐
android数据库操作封装,android数据库操作封装,android数据库操作封装android数据库操作封装
一款android数据库操作的例子,附带源代码
Android 数据库 操作简单示例,包括了增删查改,对于初学者来说还是不错的
初学者学习Android数据库必备,DbHelper Sqlite DbTest 增删改查
Android 数据库操作简单封装
android sqlite3 数据库操作
Android数据库操作实例代码
Android数据库sqlite操作命令指导,同时可以快速调试定位问题点,并获取有用信息。
Android读取Assert资源目录下数据库,数据库操作; Android读取Assert资源目录下数据库,数据库操作 Android读取Assert资源目录下数据库,数据库操作
SQLite基本操作小demo,包含了增删改查等操作,加入sql语句直接操作数据库
android sqlite 操作工具包
NULL 博文链接:https://goldenrod-z4.iteye.com/blog/774701
快速上手Android数据库操作,快速上手Android数据库操作,快速上手Android数据库操作
Android数据库封装好的完美框架,同时示例中展示了对于数据库的增删改查操作。非常好
自己写的android数据库操作Demo,使用的是Android Studio开发,包括数据库框架、数据库的加密、并发,单例模式操作数据库,绝对是你想要的Demo。
实现了android数据库的基本操作和数据库升级时数据保留,基本的增删改查
Android数据库基本操作源码 包括创建数据库,创建表,对数据库的增,删,改,查操作
android 项目数据库操作
Android异步操作数据库