- 浏览: 254278 次
- 性别:
- 来自: 上海
最新评论
-
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 1515package cn.madfinger.android.co ... -
自定义组件—TabHost
2011-10-31 12:53 1644package cn.madfinger.android.co ... -
android蓝牙主动发起配对实例
2011-09-24 08:39 25595package cn.madfinger.core; i ... -
手机蓝牙客类服务对应的UUID
2011-09-23 20:43 2073ServiceDiscoveryServerServiceCl ... -
真机调式
2011-09-22 08:29 1232真机调试遇到的问题: 1、连接到真机后没有提示安装驱动,但发 ... -
常用URI
2011-09-08 09:36 655以下是常用到的Intent的URI及其示例,包含了大部分应用中 ... -
最给力的办公平台
2011-02-24 01:02 1594SUCANG协同采用AJAX、J2EE、MV ... -
DWR应用总结
2006-11-11 10:47 10046百事通信息网 配置调试: DWR的配置说明,网上已经是N多 ... -
[求教]关于DWR+Spring延迟加载的问题
2006-11-09 12:10 7150百事通信息网 今天用DWR+Spring做整合时,发现不能通 ... -
[转]Hibernate应用中如何处理批量更新和批量删除?
2006-11-02 10:36 10203百事通信息网 在Hibernate应用中如何处理批量更新和 ... -
初识AOP
2006-11-02 00:07 4377百事通信息网 学习Spring AOP之前,先来了 ... -
AOP的应用领域
2006-11-01 11:46 2584百事通信息网 AOP的应用领域: Authentica ... -
hibernate多表查询
2006-10-30 19:01 27201百事通信息网 我的demo小程序随着我学习的过程、 ... -
spring+hibernate之applicationContext.xml配置
2006-10-27 20:31 39713百事通信息网 最近一段时间潜心自学struts,spring ... -
Spring用回调HibernateCallBack方法
2006-10-27 20:28 7680百事通信息网 Spring用回调HibernateCall ... -
[转]Spring中WebApplicationContext的研究
2006-10-27 20:27 5950百事通信息网 作者:laoer 引自:http://b ... -
struts+spring整合测试
2006-10-27 20:24 6816百事通信息网 struts+spr ... -
将action得到的值,通过request显示到页面中
2006-10-27 20:13 2517百事通信息网 今天又遇到一个问题,将action ... -
WEB分页技术
2006-10-27 19:49 3932百事通信息网 web应用开发中,分页是一项很重要的技术,分 ... -
DWR+SPRING整合
2006-10-27 19:41 3522百事通信息网 Ajax,它 ...
相关推荐
"android数据库操作封装"主要是为了提高代码的可读性、可维护性和复用性,通过创建自定义的数据访问对象(DAO)层和数据库帮助类来实现。 1. 数据库Helper类: 在Android中,我们通常会创建一个继承自`...
总结来说,这个"android数据库操作实例"涵盖了Android应用中使用SQLite数据库的基础知识,包括创建数据库、定义表结构、插入、查询、更新和删除数据等操作。通过学习这个实例,开发者可以更好地理解如何在Android...
本文将深入探讨Android中的SQLite数据库操作以及如何在命令行上操作SQLite。 首先,让我们了解Android如何与SQLite交互。在Android中,我们通常通过SQLiteOpenHelper类来创建、升级和访问数据库。这个类提供了方法...
总结起来,"android数据库操作demo"提供了一个基础的Android应用示例,用于展示SQLite数据库的使用。通过`SQLiteOpenHelper`和自定义的`DatabaseAdapter`类,我们可以方便地进行数据库的创建、升级、数据的插入、...
在Android应用开发中,数据库是存储和...对于想要深入学习Android数据库操作的开发者来说,这是一个非常有价值的实践案例。通过研究这个Demo,你可以了解到如何在实际项目中实现这些功能,提升你的Android开发技能。
本示例"android数据库操作Demo"提供了一个基础的教程,涵盖了数据库的基本操作,包括添加数据(增)、删除数据(删)、查询数据(查)和更新数据(改)。我们将深入探讨这些核心概念。 首先,Android使用SQLite作为...
在这个"Android 数据库操作"主题中,我们将深入探讨如何在Android应用中使用SQLite3进行数据库的创建、查询、插入、更新和删除等操作。 首先,让我们了解Android中的SQLite数据库的基本概念。每个Android应用都有一...
在Android开发中,数据库操作是常见的任务之一,用于存储和检索应用程序的数据。为了简化这一过程,开发者通常会创建一个数据库帮助类(DataBaseHelper)来封装SQLite数据库的操作。在这个场景下,我们有一个名为`...
总结来说,Android数据库ORM封装使得数据库操作更加简便,通过Room框架,我们可以以声明式的方式定义数据库操作,同时保持代码的清晰和可维护性。`DataBaseDemo`项目则提供了具体的实现示例,有助于你在实际项目中...
Android数据库sqlite操作命令指导,同时可以快速调试定位问题点,并获取有用信息。
本文将深入探讨SQLite在Android中的使用,包括基本概念、数据库操作以及实际应用示例。 ### 1. SQLite基本概念 - **数据库**: 数据库是存储和组织数据的结构化系统,SQLite在Android中表现为一个数据库文件,扩展...
为了提高数据库性能,可以考虑使用索引、避免在循环中执行数据库操作、批量插入数据等策略。同时,合理设计表结构,减少冗余数据,也是优化的关键。 11. 数据库安全与备份 考虑到数据安全,开发者需要对敏感信息...
在Android开发中,数据库是应用数据持久化的重要方式。Android提供了SQLite数据库系统...在`DemoDateBase`压缩包中,应该包含了这个框架的实现代码,你可以下载并参考其中的细节,进一步学习和实践Android数据库操作。
Android SQLite 数据库操作报告 一、实验目的 Android 实验报告的主要目的是熟悉 Android 平台的文件操作、掌握 Android SQLite 数据库的设计和应用、熟悉 XML 和 JSON 文件的读取。通过本实验,用户可以掌握 ...
android sqlite 操作工具包
你可以创建一个`AsyncTask`子类,将数据库操作放入`doInBackground()`方法中,然后在`onPostExecute()`方法中更新UI。这样,数据库操作不会影响主线程,提升应用响应速度。 2. **Handler-Looper-Message机制** 另...
创建一个继承自DaoSession的类,这个类将包含所有数据库操作的方法。 4. 初始化GreenDAO。在应用启动时,使用DaoMaster.DevOpenHelper创建并升级数据库,然后通过DaoSession管理数据库操作。 基本操作包括: 1. ...
在Android开发中,数据库操作是不可或缺的一部分,尤其是在构建复杂应用程序时。Android系统支持SQLite数据库,一个轻量级的关系型数据库,适用于移动设备。本项目"android 项目数据库操作"主要探讨了如何在Android...
Android数据库实例 Android数据库实例是指在Android应用程序中使用的数据库系统,用于存储和管理应用程序的数据。在Android系统中, SQLite数据库是最常用的数据库管理系统,它提供了一个轻量级的关系数据库管理...
本仓库提供了一个使用 Delphi XE7 开发的 Android 应用程序示例,该示例展示了如何在 Android 设备上通过服务器地址连接到 SQL Server 2008 数据库,并对数据库中的表进行插入、修改和删除操作。 资源文件描述 该...