1,在定义变量名称时,使用实体属性和数据库列名一致,方便后续处理
2,工具类通过java反射技术编写
3,在使用数据库操作,查询时Cursor封装实体属性值,修改时实体对象转换为ContentValues
4,方法中提供两种方式转换,使用public 属性,private 属性 通过getset方法使值对象话
import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.lang.reflect.Type; import android.content.ContentValues; import android.database.Cursor; /** * *@date 2015-7-8 *@author zhengshijun * */ public class SqliteUtils { public static <T> T cursorToEntity(Cursor cursor,Class<T> classEntity) throws InstantiationException, IllegalAccessException{ T o = null; o = classEntity.newInstance(); Class<?> entity = o.getClass(); Field[] fields = entity.getFields(); for(Field field:fields){ if(Modifier.isStatic(field.getModifiers()))continue; String name = field.getName(); int index = cursor.getColumnIndex(name); if(index==-1)continue; Class<?> type = field.getType(); if(type == String.class){ field.set(o, cursor.getString(index)); }else if(type == Integer.class||type==int.class){ field.setInt(o, cursor.getInt(index)); }else if(type == Double.class||type == double.class ){ field.setDouble(o, cursor.getDouble(index)); }else if(type == Float.class|| type==float.class){ field.setFloat(o, cursor.getFloat(index)); }else if(type == Long.class||type == long.class){ field.setLong(o, cursor.getLong(index)); } } return o; } public static ContentValues entityToValues(Serializable entity) throws IllegalArgumentException, IllegalAccessException{ ContentValues values =null; if(entity!=null){ values = new ContentValues(); Class<?> classEntity = entity.getClass(); Field[] fields =classEntity.getFields(); for(Field field:fields){ if(Modifier.isStatic(field.getModifiers()))continue; String name = field.getName(); Class<?> type = field.getType(); if(type == String.class){ Object value = field.get(entity); if(value==null)continue; values.put(name, value.toString()); }else if(type == Integer.class||type==int.class){ Integer value = field.getInt(entity); if(value==null)continue; values.put(name, value); }else if(type == Double.class||type == double.class ){ Double value = field.getDouble(entity); if(value==null)continue; values.put(name, value); }else if(type == Float.class|| type==float.class){ Float value = field.getFloat(entity); if(value==null)continue; values.put(name, value); }else if(type == Long.class||type == long.class){ Long value = field.getLong(entity); if(value==null)continue; values.put(name, value); } } } return values; } public static <T> T cursorToEntity2(Cursor cursor,Class<T> classEntity) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{ T o = null; o = classEntity.newInstance(); Class<?> entity = o.getClass(); Method methods[] = entity.getMethods(); for(Method method:methods){ if(Modifier.isStatic(method.getModifiers()))continue; String methodName = method.getName(); if(methodName.startsWith("set")){ Type types[] = method.getGenericParameterTypes(); if(method.getGenericReturnType().equals(void.class)&&types.length==1){ String name = Character.toLowerCase(methodName.charAt(3))+methodName.substring(4); int index = cursor.getColumnIndex(name); if(index==-1)continue; Type type = types[0]; if(type == String.class){ method.invoke(o, cursor.getString(index)); }else if(type == Integer.class||type==int.class){ method.invoke(o, cursor.getInt(index)); }else if(type == Double.class||type == double.class ){ method.invoke(o, cursor.getDouble(index)); }else if(type == Float.class|| type==float.class){ method.invoke(o, cursor.getFloat(index)); }else if(type == Long.class||type == long.class){ method.invoke(o, cursor.getLong(index)); }else if(type==java.util.Date.class){ }else if(type ==java.sql.Date.class){ } } } } return o; } public static ContentValues entityToValues2(Serializable entity) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException{ ContentValues values =null; if(entity!=null){ values = new ContentValues(); Class<?> classEntity = entity.getClass(); Method methods[] = classEntity.getMethods(); for(Method method:methods){ if(Modifier.isStatic(method.getModifiers()))continue; String methodName = method.getName(); if(methodName.startsWith("get")){ Type types[] = method.getGenericParameterTypes(); Type type = method.getReturnType(); if(types.length==0&&!type.equals(void.class)){ String name = Character.toLowerCase(methodName.charAt(3))+methodName.substring(4); if(type == String.class){ Object value =method.invoke(entity); if(value==null)continue; values.put(name, value.toString()); }else if(type == Integer.class||type==int.class){ Integer value = (Integer) method.invoke(entity); if(value==null)continue; values.put(name, value); }else if(type == Double.class||type == double.class ){ Double value = (Double) method.invoke(entity); if(value==null)continue; values.put(name, value); }else if(type == Float.class|| type==float.class){ Float value = (Float) method.invoke(entity); if(value==null)continue; values.put(name, value); }else if(type == Long.class||type == long.class){ Long value = (Long) method.invoke(entity); if(value==null)continue; values.put(name, value); } } } } } return values; } }
相关推荐
"SQLite可视化工具"指的是用于管理和操作SQLite数据库的图形用户界面(GUI)应用,这些工具为用户提供了一种直观的方式,以进行数据查询、编辑、创建表和视图以及执行其他数据库管理任务,而无需编写SQL命令行。...
SQLite数据管理工具则为用户提供了方便的界面来操作和管理SQLite数据库,使得数据库的创建、查询、更新和删除等操作更为便捷。 SQLite数据库的核心特性包括: 1. **跨平台性**:SQLite支持多种操作系统,如Windows...
"SQLite数据导入工具"是为了帮助用户方便地将数据批量导入到SQLite数据库中而设计的实用程序。这样的工具通常支持多种数据格式,如CSV、Excel、XML或者JSON,以便于从不同来源的数据源进行迁移或整合。通过使用这类...
在处理敏感数据时,为了保护信息安全,对SQLite数据库进行加密是必要的步骤。本文将详细介绍如何使用.NET环境下的SQLite加密解密工具来确保数据库的安全。 首先,SQLite数据库的加密通常涉及到两方面的技术:透明...
总之,使用“android sqlite可视化工具”如SQLite Expert,能极大地提升Android开发中对SQLite数据库的管理和维护效率,使得非SQL专家的开发者也能轻松处理数据库相关任务。同时,这类工具通常具有良好的用户界面和...
这种工具包在许多需要分布式数据存储和处理的场景中非常有用,比如物联网(IoT)设备、移动应用、小型服务器以及任何无法或不便使用大型数据库系统的环境。 SQLite是一款轻量级的关系型数据库管理系统,以其小巧、...
总之,SQLiteBrowser作为一款强大的SQLite数据库管理工具,能够帮助用户在不熟悉SQL语法的情况下也能有效地处理SQLite数据文件,它提供了丰富的功能,满足了从简单的查看到复杂的数据库操作的各种需求。对于那些需要...
SQLite3是一种轻量级、开源的嵌入式SQL数据库引擎,广泛应用于移动设备、桌面应用以及服务器环境,尤其适合处理小到中等规模的数据存储需求。它的设计目标是实现零配置、事务支持、完整的SQL语法以及自包含性,使得...
5. **事务处理**:支持开始、提交和回滚事务,确保数据的一致性和完整性。 6. **权限管理**:可以设置用户角色和权限,控制不同用户对数据库的操作范围。 7. **插件扩展**:sqliteStudio允许开发和安装插件,以...
这篇博客“Android SQLite学习工具”可能详细介绍了如何在Android环境中使用SQLite进行数据操作,并提供了一个实用的SQLite管理工具——sqlite3.exe。 SQLite数据库在Android中的应用主要包括创建数据库、创建表、...
此外,新的优化器改进使得查询处理更快,尤其是对于大型数据集。 总之,sqlite3.exe作为SQLite的命令行工具,为开发者和数据库管理员提供了一个直接、高效的途径来操作SQLite数据库。无论是在开发阶段还是在生产...
SQLite数据库操作工具使得用户能够方便地管理和操作SQLite数据库,进行数据的增删改查等操作,而无需深入了解复杂的SQL语法或数据库管理系统。 SQLite Studio是一款非常实用的SQLite数据库管理工具,它提供了一个...
当我们需要在两者之间进行数据迁移时,就需要借助特定的工具来完成,比如"SQL Server数据导入SQLite工具"。 这个工具的主要功能是将SQL Server数据库转换为SQLite数据库,这对于开发者和数据管理人员来说非常实用。...
在处理小型到中型的数据存储时,SQLite是一个高效且可靠的解决方案。为了更方便地管理和操作SQLite数据库,这里我们将介绍两款实用的SQLite可视化工具——DB Browser for SQLite(也称为SQLiteStudio)和SQLite ...
4. **导入/导出数据**:工具可能支持将数据导入到SQLite数据库,或者将数据库内容导出为CSV或其他格式。 5. **备份与恢复**:可以方便地对数据库进行备份,防止数据丢失,并支持从备份文件恢复。 6. **权限管理**:...
通过优化的查询计划和索引机制,SQLite3能高效地处理大量数据。 6. **数据库大小限制**:SQLite3理论上可以支持高达140TB的数据库大小,足以应对大多数应用场景。 7. **安全性**:SQLite3提供了加密选项,允许对...
在Python编程环境中,SQLite被广泛应用于数据存储,尤其适合小规模的数据处理和开发项目。为了更方便地操作SQLite数据库,通常我们会借助一些可视化工具,例如SQLite Studio,这就是"SQLite可视化工具.zip"提供的...
7. **事务处理**:支持事务的开始、提交和回滚,确保数据的一致性。 8. **备份与恢复**:可以导出数据库为SQL脚本或者备份数据库文件,方便数据的备份和迁移。 9. **数据导入导出**:支持将数据导入或导出到CSV、...
用户还可以批量编辑和导入/导出数据,提高数据处理效率。 4. **查询构建器**:提供一个可视化查询构建器,通过拖拽表和字段,生成复杂的SQL语句,减少了编写错误的可能性。 5. **备份与恢复**:支持数据库的备份和...
8. **编码支持**:SQLiteStudio支持多种字符集,包括UTF-8,确保在处理不同语言和国际化数据时的兼容性。 9. **安全性**:用户可以设置数据库权限,保护敏感数据。此外,SQLite本身支持加密,通过SQLiteStudio可以...