- 浏览: 31876 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
jameslin_2011:
以为是源码。。。
微媒-腾讯微博开放平台应用 发布新版本了(2012.05.04更新) -
hbxflihua:
很不错,不过貌似少了些东西。比如你实现 OnClickList ...
Android拍照、录像、录音代码范例 -
androidzjb:
谢谢分享,
Android拍照、录像、录音代码范例 -
liu_jun_y:
自己每次项目完后都想总结下,但总是推。。。。
【转载】开发经验总结,很受用。 -
379548695:
问下楼主。是基于哪个版本开发的。我导入之后sdk选1.4.,1 ...
Tab的多种典型用法总结(带动画)
在写DAO层时,觉得从Cursor里一个一个的取出字段值再装到VO(值对象)里太麻烦了,就写了一个工具类,用到了反射,可以把查询记录的值装到对应的VO里,也可以生成该VO的List。
使用时需要注意:
考虑到Android的性能问题,VO没有使用Setter和Getter,而是直接用public的属性。
表中的字段名需要和VO的属性名一样,要是不一样就得在查询的SQL中使用字段别名让字段别名和VO属性名一样。
下面是实现代码:
import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; /** * 通过SQL语句查询出结果并封闭到VO里 * * */ public class HappySQL { /** * 通过SQL语句获得对应的VO。注意:Cursor的字段名或者别名一定要和VO的成员名一样 * * @param db * @param sql * @param clazz * @return */ @SuppressWarnings("rawtypes") public static Object sql2VO(SQLiteDatabase db, String sql, Class clazz) { Cursor c = db.rawQuery(sql, null); return cursor2VO(c, clazz); } /** * 通过SQL语句获得对应的VO。注意:Cursor的字段名或者别名一定要和VO的成员名一样 * * @param db * @param sql * @param selectionArgs * @param clazz * @return */ @SuppressWarnings("rawtypes") public static Object sql2VO(SQLiteDatabase db, String sql, String[] selectionArgs, Class clazz) { Cursor c = db.rawQuery(sql, selectionArgs); return cursor2VO(c, clazz); } /** * 通过SQL语句获得对应的VO的List。注意:Cursor的字段名或者别名一定要和VO的成员名一样 * * @param db * @param sql * @param clazz * @return */ @SuppressWarnings("rawtypes") public static List sql2VOList(SQLiteDatabase db, String sql, Class clazz) { Cursor c = db.rawQuery(sql, null); return cursor2VOList(c, clazz); } /** * 通过SQL语句获得对应的VO的List。注意:Cursor的字段名或者别名一定要和VO的成员名一样 * * @param db * @param sql * @param selectionArgs * @param clazz * @return */ @SuppressWarnings("rawtypes") public static List sql2VOList(SQLiteDatabase db, String sql, String[] selectionArgs, Class clazz) { Cursor c = db.rawQuery(sql, selectionArgs); return cursor2VOList(c, clazz); } /** * 通过Cursor转换成对应的VO。注意:Cursor里的字段名(可用别名)必须要和VO的属性名一致 * * @param c * @param clazz * @return */ @SuppressWarnings({ "rawtypes", "unused" }) private static Object cursor2VO(Cursor c, Class clazz) { if (c == null) { return null; } Object obj; int i = 1; try { c.moveToNext(); obj = setValues2Fields(c, clazz); return obj; } catch (Exception e) { System.out.println(e); System.out.println("ERROR @:cursor2VO"); return null; } finally { c.close(); } } /** * 通过Cursor转换成对应的VO集合。注意:Cursor里的字段名(可用别名)必须要和VO的属性名一致 * * @param c * @param clazz * @return */ @SuppressWarnings({ "rawtypes", "unchecked" }) private static List cursor2VOList(Cursor c, Class clazz) { if (c == null) { return null; } List list = new LinkedList(); Object obj; try { while (c.moveToNext()) { obj = setValues2Fields(c, clazz); list.add(obj); } return list; } catch (Exception e) { e.printStackTrace(); System.out.println("ERROR @:cursor2VOList"); return null; } finally { c.close(); } } /** * 把值设置进类属性里 * * @param columnNames * @param fields * @param c * @param obj * @throws Exception */ @SuppressWarnings("rawtypes") private static Object setValues2Fields(Cursor c, Class clazz) throws Exception { String[] columnNames = c.getColumnNames();// 字段数组 Object obj = clazz.newInstance(); Field[] fields = clazz.getFields(); for (Field _field : fields) { Class<? extends Object> typeClass = _field.getType();// 属性类型 for (int j = 0; j < columnNames.length; j++) { String columnName = columnNames[j]; typeClass = getBasicClass(typeClass); boolean isBasicType = isBasicType(typeClass); if (isBasicType) { if (columnName.equalsIgnoreCase(_field.getName())) {// 是基本类型 String _str = c.getString(c.getColumnIndex(columnName)); if (_str == null) { break; } _str = _str == null ? "" : _str; Constructor<? extends Object> cons = typeClass .getConstructor(String.class); Object attribute = cons.newInstance(_str); _field.setAccessible(true); _field.set(obj, attribute); break; } } else { Object obj2 = setValues2Fields(c, typeClass);// 递归 _field.set(obj, obj2); break; } } } return obj; } /** * 判断是不是基本类型 * * @param typeClass * @return */ @SuppressWarnings("rawtypes") private static boolean isBasicType(Class typeClass) { if (typeClass.equals(Integer.class) || typeClass.equals(Long.class) || typeClass.equals(Float.class) || typeClass.equals(Double.class) || typeClass.equals(Boolean.class) || typeClass.equals(Byte.class) || typeClass.equals(Short.class) || typeClass.equals(String.class)) { return true; } else { return false; } } /** * 获得包装类 * * @param typeClass * @return */ @SuppressWarnings("all") public static Class<? extends Object> getBasicClass(Class typeClass) { Class _class = basicMap.get(typeClass); if (_class == null) _class = typeClass; return _class; } @SuppressWarnings("rawtypes") private static Map<Class, Class> basicMap = new HashMap<Class, Class>(); static { basicMap.put(int.class, Integer.class); basicMap.put(long.class, Long.class); basicMap.put(float.class, Float.class); basicMap.put(double.class, Double.class); basicMap.put(boolean.class, Boolean.class); basicMap.put(byte.class, Byte.class); basicMap.put(short.class, Short.class); } }
调用例子:
获得单个VO:
String sql = "select * from tb_info_review where info_id = " + info_id; return (Info_re) HappySQL.sql2VO(db, sql, Info_re.class);
获得List:
String sql = "select * from tb_info m, tb_sub2 f where m.send_state = 1 and review_state = 0 and m.info_id = f.info_id"; List<Info> infos = HappySQL.sql2VOList(db, sql, Info.class);
带变参获得List:
String sql = "select * from tb_info m,tb_ttf f where m.info_id = ? and m.info_id = f.info_id"; return (SbMan) HappySQL.sql2VO(db, sql, new String[] { info_id + "" }, SbMan.class);
转自:http://blog.csdn.net/oo8_8oo/article/details/7003162
发表评论
-
微媒-腾讯微博开放平台应用 发布新版本了(2012.05.04更新)
2012-04-29 02:51 1082今天,微媒正式上线了。 介绍: ... -
Tab的多种典型用法总结(带动画)
2011-12-09 23:29 2972里面总结的是tab的一些比较典型的用法,带有多种动画效果,希望 ... -
Tab的多种典型用法总结(带动画)
2011-12-09 23:26 1里面总结的是tab的一些比较典型的用法,带有多种动画效果,希望 ... -
【转载】开发经验总结,很受用。
2011-12-07 23:09 11111、有一个方法,有一段 ... -
Android UI 设计秘笈
2011-11-27 22:02 1158好的UI设计可以帮助我们卖出更多拷贝,赚到更多钱^_^. A ... -
Android拍照、录像、录音代码范例
2011-11-27 22:01 2232RecordActivity.java package ... -
获取优酷、土豆、酷6、6间房等视频
2011-11-27 21:59 1394通过JAVA获取优酷、土豆、酷6、6间房、56视频,现在很多社 ... -
android手势识别ViewFlipper触摸动画
2011-11-26 16:23 1153今天给大家介绍一下如何实现androd主页面的左右拖动效果。实 ... -
Android开发返回拍摄的图片
2011-11-25 22:54 979第一步 try { Intent intent ... -
鉴客 Android中如何生成带圆角的Bitmap图片
2011-11-25 22:30 1982有时候我们在开发Android应用时,会遇到圆角图片的问题,那 ... -
鉴客 Android 的 MediaPlayer 多媒体播放器
2011-11-25 22:27 1143MediaPlayer 可以播放音频和视频,另外也可以通过 ... -
Android 轻松实现语音识别
2011-11-25 22:23 999苹果的iphone 有语音识别用的是Google 的技术,做为 ... -
半个小时移植Flash游戏到Android平台
2011-11-25 22:20 1676网上有很多现成的Flash ... -
分享Android CellLocation源码,基于Rexsee对象的基站定位功能
2011-11-24 16:05 1930使用Rexsee的基站定位(RexseeCellLocatio ... -
Android短信功能实现源码
2011-11-24 15:57 1908一段完整的Android平台上短信功能的接口源码,利用扩展的A ... -
Android中判断网络功能是否可用
2011-11-24 15:51 1342如何在Android中判断网络功能是否可用,代码如下: ... -
Android中如何生成带圆角的Bitmap图片
2011-11-24 15:46 887有时候我们在开发Android应用时,会遇到圆角图片的问题,那 ... -
[转]近百android程序源码贡献
2011-11-24 00:02 990Android PDF 阅读器 http://sourcefo ... -
Android imageView图片按比例缩放
2011-11-23 16:42 2924android:scaleType可控制图片的缩放方式,示例代 ...
相关推荐
赠送jar包:sqlite-jdbc-3.15.1.jar; 赠送原API文档:sqlite-jdbc-3.15.1-javadoc.jar; 赠送源代码:sqlite-jdbc-3.15.1-sources.jar; 赠送Maven依赖信息文件:sqlite-jdbc-3.15.1.pom; 包含翻译后的API文档:...
赠送jar包:sqlite-jdbc-3.34.0.jar; 赠送原API文档:sqlite-jdbc-3.34.0-javadoc.jar; 赠送源代码:sqlite-jdbc-3.34.0-sources.jar; 赠送Maven依赖信息文件:sqlite-jdbc-3.34.0.pom; 包含翻译后的API文档:...
该压缩包文件 "sqlite-autoconf-3420000.tar.gz" 是一种常见的 Linux/Unix 下的归档文件格式,".tar" 表示这是一个打包文件,用于将多个文件或目录合并为一个单一的文件,而 ".gz" 则表示这个打包文件已经通过 Gzip ...
sqlite-tools-win32-x86-3290000 是一个SQLite数据库工具在Windows 32位系统上的安装包或目录名称。SQLite是一个C库,提供了一个轻量级的磁盘文件数据库,不需要一个单独的服务器进程或操作系统(不需要配置、安装或...
"sqlite-tools-win-x64-3440200.zip"这个压缩包包含了三个主要的SQLite实用工具,它们分别是sqlite3_analyzer.exe、sqlite3.exe和sqldiff.exe。 1. **sqlite3.exe**:这是SQLite的命令行接口,也是最基础的工具。...
1. **安装与运行**:解压"sqlite-shell-win32-x86-3080200.zip"到任意目录,然后找到sqlite3.exe,双击运行或在命令行中输入其路径启动。 2. **连接数据库**:在命令行中,输入`.open 数据库文件名`,例如`.open ...
网上可以下到sqlite-shell-win32-x86: sqlite3.exe 2. 为了方便命令行执行,将sqlite3.exe放到svn 项目的主目录下,和.svn目录同级下。 3. 执行 sqlite3 .svn/wc.db "select * from work_queue".看到有4条记录。就是...
sqlite-devel-3.7.17-8.el7.x86_64.rpm
"sqlite-autoconf-3330000.tar.gz"是SQLite3的一个特定版本(3330000)的源代码包,通常用于开发人员下载和编译以适应其项目需求或进行自定义扩展。 SQLite3的核心特性包括: 1. **无服务器模式**:与大多数数据库...
SQLite数据库是文档型数据库,其具备体积小移动方便等特点;以下jar包:sqlite-jdbc-3.30.1.jar文件为SQLite数据库对应的数据库驱动jar包;
使用sqlite-jdbc驱动时,开发者需要在Java代码中添加相应的依赖,并通过JDBC URL来指定SQLite数据库的位置。例如: ```java Class.forName("org.sqlite.JDBC"); Connection conn = DriverManager.getConnection(...
这个“sqlite-tools-win32-x86-3360000.zip”压缩包是SQLite的Windows 32位版本工具集,版本号为3360000,包含了用于管理SQLite数据库的一系列命令行工具。 1. SQLite数据库系统: SQLite是一个自包含、无服务器、...
"sqlite-autoconf-3080800.tar.gz" 是一个包含SQLite源代码的压缩包,版本号为3080800,通过自动配置脚本编译。这个文件通常用于开发环境,允许开发者在自己的系统上编译和定制SQLite库。 SQLite的特性包括: 1. *...
sqlite-jdbc-3.36.0.3.jar 最新吧2021 8月底更新
为了使用这个驱动,你需要将sqlite-jdbc-3.31.1.jar添加到你的项目类路径中。如果是Maven项目,可以在pom.xml文件中添加依赖: ```xml <groupId>org.xerial <artifactId>sqlite-jdbc <version>3.31.1 ``` ...
sqlite-jdbc-3.34.0.jar,支持M1芯片了,Android Studio可以正常链接手机了
--sqllite3 sqlite-shell-win32-x86: sqlite3.exe --svn执行clean up命令时报错“Previous operation has not finished; run 'cleanup' if it was interrupted”。 解决此问题所需文件 2. 为了方便命令行执行,将...
总的来说,`sqlite-jdbc-3.7.2.jar`和`sqlite-jdbc-3.20.1.jar`是Java开发者连接SQLite数据库的重要工具,它们提供了方便的接口和高效的数据操作能力,适用于各种大小的项目,特别是那些需要轻量级、无需独立服务器...
`sqlite-autoconf-3290000.tar.gz` 是SQLite的一个源码包,版本号为3290000,通过这个包我们可以获取SQLite的原始代码并进行自定义编译和安装。 首先,让我们详细了解一下源码编译的基本步骤: 1. **解压缩**:...