/** * 创建可运行SQL语句。 替换sql语句中的命名参数,如果命名参数没有找到,返回命名参数的名字. sql参数:指定为(:param)类型,以“:”开头+变量名。例:--> :param * * @param sql SQL语句(带参数) * @param prop 参数MAP(参数名,参数值) * @return String 可运行SQL语句 */ protected String createExecuteSQL(String sql, Map<String, Object> prop) { /* * 如果参数信息为空时,直接返回参数SQL */ if (BaseUtil.isEmpty(sql) || prop == null) { return sql; } // 获取sql中的所有变量参数 List<String> var = BaseUtil.matcherList(BaseDBConst.SQL_VARIABLES, sql, 1); if (var == null || var.size() == 0) { return sql; } StringBuilder s = new StringBuilder(); // 循环所有参数 for (Iterator<String> iterator = var.iterator(); iterator.hasNext(); ) { s.delete(0, s.length()); String key = iterator.next(); Object value = prop.get(key); /* * 如果取得的值为null时,将参数变量替换为“?” 如果取得的值是数值类型时,将参数变量替换为“值” * 如果取得的值是字符串类型时,将参数变量替换为“‘”+值+“’” 如果取得的值是集合类型时,将参数变量替换为集合转换in查询参数 * 取得的值是其他类型时,将参数变量替换为“‘”+值+“’” */ if (value == null) { // 参数不能为空 sql = sql.replaceFirst(BaseDBConst.SQL_VARIABLES, BaseDBConst.QUESTION_MARK); } else if (value instanceof Number) { // 数值类型 sql = sql.replaceFirst(BaseDBConst.SQL_VARIABLES, value.toString()); } else if (value instanceof String) { // 字符串类型 s.append(BaseDBConst.APOSTROPHE); s.append(value); s.append(BaseDBConst.APOSTROPHE); sql = sql.replaceFirst(BaseDBConst.SQL_VARIABLES, s.toString()); } else if (value instanceof Collection) { // 集合 对应in查询 sql = sql.replaceFirst( BaseDBConst.SQL_VARIABLES, collectionToInSQLVariables((Collection<?>) value)); } else { // 其它情况作为普通String处理 s.append(BaseDBConst.APOSTROPHE); s.append(value); s.append(BaseDBConst.APOSTROPHE); sql = sql.replaceFirst(BaseDBConst.SQL_VARIABLES, s.toString()); } } return sql; }
/** * 将游标结果集转成指定类名的列表 * * @param cursor 游标 * @param className 类名(完全路径:包名+类名) * @return */ @SuppressWarnings("unchecked") protected <E> List<E> cursorToList(Cursor cursor, Class<E> cls) { List<E> rs = new ArrayList<E>(); if (!BaseUtil.isEmpty(cursor)) { int count = cursor.getCount(); // 游标移动到第一条记录 cursor.moveToFirst(); int columnCount = cursor.getColumnCount(); for (int i = 0; i < count; i++) { if (cls == null) { BaseDaoBean bean = new BaseDaoBean(); for (int j = 0; j < columnCount; j++) { bean.put(cursor.getColumnName(j), cursor.getString(j)); } rs.add((E) bean); } else { try { E obj = cls.newInstance(); for (int j = 0; j < columnCount; j++) { setAttributeValue(obj, j, cursor); } rs.add(obj); } catch (Exception e) { Log.e(TAG, "数据转换失败"); break; } } cursor.moveToNext(); } } return rs; }
/** * 插入数据库的表数据 * * @param tableName 表名 * @param prop 数据MAP * @return long 数据记录主键 */ public long save(String tableName, Map<String, Object> prop) { // 更新数据 并获取新数据的id ContentValues cv = new ContentValues(); for (Iterator<String> iterator = prop.keySet().iterator(); iterator.hasNext(); ) { String key = iterator.next(); cv.put(key, BaseUtil.nullToSpace(prop.get(key))); } return save(tableName, cv); }