`
M.c
  • 浏览: 16597 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Android SQLite公用结果处理

阅读更多
看朋友写数据库查询,获取结果的时候,每次都会写一大堆代码,我想起以前Java里写过一个公用的方法。
因为初学Android所以就试着写一个,可以满足我的需求。
有什么需要改的或者优化的还请赐教。
代码如下:

package cn.com.choicesoft.weiqian.util;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

/**
 *@Author:M.c
 *@Comments:数据库公用查询结果 处理类
 *@CreateDate:2014-1-20
 *@Email:JNWSCZH@163.COM
 */
public class ListProcessor {
	private DBManager db;
	public DBManager getDb(Context context) {
		if(db==null){
			db = new DBManager(context);
		}
		return db;
	}
	/**
	 * 根据传入实体返回对应的实体数组
	 * @param sql SQL语句
	 * @param selectionArgs SQL条件
	 * @param context Activity
	 * @param cal 实体类 【实体内属性只支持:String,Integer,Float,Double,Boolean,Short,Long,Character(char)】
	 * @return List<T>
	 */
	public <T> List<T> query(String sql,String[] selectionArgs,Context context,Class<T> cal){
		SQLiteDatabase database = getDb(context).openDatabase();
		Cursor c = database.rawQuery(sql, selectionArgs);
		Method[] methods = cal.getMethods();
		List<T> list=new ArrayList<T>();
		while (c.moveToNext()) {
			Object obj=null;
			try {
				obj=cal.newInstance();
			} catch (InstantiationException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			}
			for (Method method : methods) {
				String methodName=method.getName();
				if(methodName.matches("^set[A-Z]\\w+$")){
					String name=methodName.substring(3, methodName.length()).toUpperCase();
					for (int i=0;i<c.getColumnCount();i++) {
						if(name.equalsIgnoreCase(c.getColumnName(i))){
							try {
								typeConf(method,c.getString(i),cal,obj);
								break;
							} catch (Exception e) {
								e.printStackTrace();
							}
						}
					}
				}
			}
			list.add((T)obj);
		}
		if(c!=null){
			c.close();
		}
		if(database!=null){
			database.close();
		}
		return list;
	}
	/**
	 * 类型转换
	 * @param method
	 * @param value
	 * @param cla
	 * @throws Exception
	 */
	public void typeConf(Method method, Object value, Class<?> cls,Object obj)	throws Exception {
		Object typeName = method.getParameterTypes()[0];
		Method setMethod = null;
		if (typeName == String.class) {
			setMethod = cls.getMethod(method.getName(), String.class);
			setMethod.invoke(obj, value.toString());
		}else if (typeName == Double.class||typeName.toString().equals("double")){
			setMethod = cls.getMethod(method.getName(), typeName == Double.class?Double.class:double.class);
			setMethod.invoke(obj, new Double(value.toString()));
		}else if (typeName == Integer.class||typeName.toString().equals("int")) {
			setMethod = cls.getMethod(method.getName(), typeName == Integer.class?Integer.class:int.class);
			setMethod.invoke(obj, Integer.valueOf(value.toString()));
		}else if (typeName == Long.class||typeName.toString().equals("long")) {
			setMethod = cls.getMethod(method.getName(), typeName == Long.class?Long.class:long.class);
			setMethod.invoke(obj, Long.valueOf(value.toString()));
		} else if (typeName == Character.class||typeName.toString().equals("char")) {
			setMethod = cls.getMethod(method.getName(),typeName == Character.class?Character.class:char.class);
			setMethod.invoke(obj, value.toString().charAt(0));
		} else if (typeName == Boolean.class||typeName.toString().equals("boolean")) {
			setMethod = cls.getMethod(method.getName(), typeName == Boolean.class?Boolean.class:boolean.class);
			setMethod.invoke(obj, new Boolean(value.toString()));
		} else if (typeName == Float.class||typeName.toString().equals("float")) {
			setMethod = cls.getMethod(method.getName(), typeName == Float.class?Float.class:float.class);
			setMethod.invoke(obj, Float.valueOf(value.toString()));
		}  else if (typeName == Short.class||typeName.toString().equals("short")) {
			setMethod = cls.getMethod(method.getName(), typeName == Short.class?Short.class:short.class);
			setMethod.invoke(obj, Short.valueOf(value.toString()));
		}
	}



声明
        欢迎转载,但请保留文章原始出处
        [Iteye]-http://jnwsczh.iteye.com/blog/2019454
0
0
分享到:
评论

相关推荐

    Android 2.3 源代码

    "other"目录通常包含一些不直接归类于特定模块的代码,可能涵盖系统服务、公用工具函数、异常处理等。开发者可以通过这部分源代码了解系统级服务的实现,例如电源管理、硬件抽象层(HAL)等。 四、国际化支持(jp、...

    Android Program Sample Source(2)

    - 数据持久化:Android应用程序通常需要保存用户数据,这可能涉及到SQLite数据库、SharedPreferences、文件存储或者ContentProvider的使用。 3. **AndExam_Install** - 安装过程:这个部分可能涉及到了Android...

    Android优秀简历

    - **数据库操作**:熟悉AndroidSqlite数据库的相关操作,包括数据库的创建和对数据库进行增删改查的操作。 - **线程与通信**:熟悉线程池的使用和线程间的通信。 - **网络编程**:熟悉Android网络编程,能够使用...

    Android媒体库框架(mediascanner).doc

    MediaScannerService 调用一个公用类 MediaScanner 去处理真正的工作。 MediaProvider MediaProvider 是一个 Content Provider,负责提供媒体文件的元数据给其他应用程序。MediaProvider 保存到 MediaStore 中的...

    android小程序

    为了实现以上功能,开发者可能运用了Android开发中的多项技术,如Java或Kotlin作为编程语言,使用Android Studio作为集成开发环境(IDE),并可能结合了SQLite数据库来存储用户数据。此外,UI设计遵循Material ...

    android开发各种实用的工具类

    database 数据库操作:SharedPreferences数据处理操作、SQLite数据库操作 network 网络工具 resource Android项目的资源管理工具 system Android系统相关的工具集 ui UI相关 widget 一些UI组件 crypt Base64...

    蜕变公用日记本

    后端则可能基于Java、Python、Node.js等服务器端语言,处理用户请求并提供数据存储与检索功能;数据库系统如MySQL、SQLite或NoSQL数据库如MongoDB,用于存储用户的日记内容。 2. **用户认证与安全**:作为一款公用...

    java版商城源码下载-Android_Interview:Android面试题目合集

    外部文件存储:将公用数据保存在共享的外部存储介质中 SQLite数据库存储:将结构化的数据保存在私有的一个数据库中 网络存储:将私有的数据保存在网络上开发者自己的服务器中 Content Provider数据存储:获取、保存...

    android studio的使用sdk manager的方法

    Android SDK Platform-tools(必须,只需下载一个版本,一般选最新版本):从android2.3开始划出此目录,存放公用开发工具,比如adb、sqlite3等,被划分到了这里。 Android SDK Build-tools(必须,可以安装多个版本...

    MateroU:一个Android应用程序,用于在Google地图上显示实用程序的位置

    "MateroU"是一款基于Android平台的应用程序,旨在为用户提供一个便捷的方式来查找和定位周围的公用设施,如水电气供应站、公共卫生间、公园等。该应用巧妙地结合了Google Maps API,使用户能够直观地在地图上查看...

    60条Android开发注意事项与经验总结

    31. 数据库优化:完整型数据一定要用Sqlite的Transaction,大数据一定要用。粗略测试插入100个数据有20倍的提速,插入1000个数据就有100多倍的提速。 32. 字符串处理:避免String=”null”的情况出现String = null,...

    QT连接数据库配置文件

    QT框架是Qt公司开发的一款强大的跨平台应用程序开发框架,它提供了丰富的库和工具,使得开发者能够在Windows、Linux、macOS、Android以及iOS等操作系统上构建GUI应用。在QT中连接数据库,主要是通过QSqlDatabase模块...

    软件技术毕业设计论文-“脸萌”设计.doc

    * 数据库:SQLite * 开发工具包:JDK1.7 * 开发平台:Eclipse * 项目管理工具:SVN * 文件快速查找工具:Everything 开发模式/架构 ------------- 开发模式/架构主要包括按照模块组织代码的包结构和按照代码的类型...

    roomate-organizer:hack gt 2015的APP

    - 应用可能采用了SQLite作为本地数据库来存储任务、事件等信息,这是Android系统内置的轻量级数据库,适合小型应用程序。此外,也可能使用云服务如Firebase来实现数据同步,以便所有室友可以实时更新和查看信息。 ...

Global site tag (gtag.js) - Google Analytics