KJFrame使用注意项
2016-02-25 08:52
302 查看
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);
相关文章推荐
- Android-使用java代码实现界面
- Android中ListView结合CheckBox判断选中项
- webService、servlet和RMI的区别
- 详解SPI中的极性CPOL和相位CPHA
- java使用iText生成pdf表格
- 原生javascript实现addClass,removeClass,hasClass函数
- java随机抽取指定范围内不重复的n个数
- 数据结构之栈和队列
- 原 iOS中的内存管理(下)
- Android 带checkbox的listView 实现多选,全选,反选
- 浏览器jsp、html之间的关系
- Windows中使用Java生成Excel文件并插入图片的方法
- Linux 标准库下的unistd.h
- 自定义getElementByClass
- 新版架构图详解和旧版比较
- C#实现打印与打印预览功能
- ~~~~~~~~~~~~~~~
- Bitmap与Drawable之间的相互转换
- 世界500强企业优秀员工的12条核心标准(转载)
- hihoCoder2月29日(字符串模拟)