KJFrame使用注意项



1、在使用KJFrame中的KJHttp时,调用post时默认方法是带缓存的,当不需要使用缓存时调用
public Request<byte[]> post(String url, HttpParams params,
                            boolean useCache, HttpCallBack callback)
2、KJDB不能再APPlication中使用

3、KJDB中在find和save之前都会判断table存不存在,如果不存在,则创建table。但是当原来有一个原始的数据库A,并重新创建一个数据库B,库A中有表C,这时当要在B中同样创建C时,判断则会显示表已存在。原因如下KJDB会在内存中存一个TableInfo的对象,其中有一个变量checkDatabese// 在对实体进行数据库操作的时候查询是否已经有表了,只需查询一遍,用此标示。判断表是否在库中存在之前会先判断对象中checkDatabese是否为true,若为true则表示为已存在。
	KJDB相关原码如下:
	
  private boolean tableIsExist(TableInfo table) {
        if (table.isCheckDatabese()) {
            Log.i("MainActivity"," ------------------------------到这儿了吗1------------------------------- ");
            return true;
        }
        Cursor cursor = null;
        try {
            String sql = "SELECT COUNT(*) AS c FROM sqlite_master WHERE type ='table' AND name ='"
                    + table.getTableName() + "' ";

            debugSql(sql);
            Log.i("MainActivity", sql + "    " + db.getPath());
            cursor = db.rawQuery(sql, null);
            if (cursor != null && cursor.moveToNext()) {
                int count = cursor.getInt(0);
                Log.i("MainActivity", " ------------------------------到这儿了吗2------------------------------- " + count);
                if (count > 0) {
                    Log.i("MainActivity", " ------------------------------到这儿了吗3------------------------------- ");
                    table.setCheckDatabese(true);
                    return true;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (cursor != null)
                cursor.close();
            cursor = null;
        }

        return false;
    }


 private void checkTableExist(Class<?> clazz) {

        Log.i("MainActivity", "---------------- checkTableExist -----------------");
        Log.i("MainActivity", TableInfo.get(clazz).getClassName());
        if (!tableIsExist(TableInfo.get(clazz))) {
            String sql = SqlBuilder.getCreatTableSQL(clazz);
            Log.i("MainActivity", sql);
            debugSql(sql);
            db.execSQL(sql);
        } else {
            Log.i("MainActivity", "---------------- checkTableExist ----------------- false");
        }
    }
  /**
     * 根据主键查找数据(默认不查询多对一或者一对多的关联数据)
     *
     * @param id
     * @param clazz
     */
    public <T> T findById(Object id, Class<T> clazz) {
        Log.i("MainActivity", "-------------------到这儿了吗-----------------" + db.getPath());
        checkTableExist(clazz);
        SqlInfo sqlInfo = SqlBuilder.getSelectSqlAsSqlInfo(clazz, id);
        if (sqlInfo != null) {
            debugSql(sqlInfo.getSql());
            Cursor cursor = db.rawQuery(sqlInfo.getSql(),
                    sqlInfo.getBindArgsAsStringArray());
            try {
                if (cursor.moveToNext()) {
                    return CursorHelper.getEntity(cursor, clazz, this);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                cursor.close();
            }
        }
        return null;
    }

    解决方案:
    在重新创建数据库B之前,或者对库B中的表进行操作前将TableInfo中的checkDatabese置为false,代码如下:
    TableInfo.get(C.class).setCheckDatabese(false);






                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值