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);