虽然这几天工作繁忙,但是被一个莫名的bug折腾了半天,我还是本着分享的精神,让广大developer不再像我这么蛋疼,在这里记录下这个bug以及解决的方法.
由于图方便原因在项目中使用了ORM开源框架ormlite,对于这个框架使用的还不熟练,今天遇到一个bug,用了很长的时间才解决,用过ormlite的同学应该知道这个框架建表的方法了,首先创建Dao,然后再实例化dao,在需要的地方使用dao中的dao.queryForId(id)这个方法来插入数据的同时也会在SQLITE中新建一个表,这个时候问题来了,比如现在有3张表A,B,C,开始你向A,B中插入了数据也新建了表,项目总是需要调试的,当你再次运行程序,准备插入C表,并且新建数据时,你会发现始终都无法建立C表到SQLITE中,一直报一个错,no such table(数据库中没有这张表),然后你会反复的看自己的代码,看javabean,看dao,你发现没错啊,可是就是无法新建表,无法插入数据了,这个时候其实有个很简单的解决方法:1,卸载你的APP,重新run.
2.进入DDMS,到data/data目录下找到该工程的目录,手动删除掉你刚刚建立的这个数据库
究其原因应该是因为创建表的代码导致的,我代码如下:
package com.eshore.express.db;
import java.sql.SQLException;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import com.eshore.express.AppContext;
import com.eshore.express.common.Constant;
import com.eshore.express.model.AddressList;
import com.eshore.express.model.OrderList;
import com.eshore.express.model.UserList;
import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;
public class DBHelper extends OrmLiteSqliteOpenHelper {
private static DBHelper instance = new DBHelper();
public static DBHelper getInstance() {
return instance;
}
public DBHelper() {
super(AppContext.getContext(), Constant.DB_NAME, null, 1);// 初始化数据库
}
@Override
public void onCreate(SQLiteDatabase arg0, ConnectionSource arg1) {
// 创建表
try {
TableUtils.createTableIfNotExists(connectionSource, UserList.class);
TableUtils.createTableIfNotExists(connectionSource,
AddressList.class);
TableUtils
.createTableIfNotExists(connectionSource, OrderList.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase arg0, ConnectionSource arg1, int arg2,
int arg3) {
// 更新表
}
/**
* 清空表操作
*/
public void clear() {
try {
TableUtils.clearTable(connectionSource, UserList.class);
TableUtils.clearTable(connectionSource, AddressList.class);
TableUtils.clearTable(connectionSource, OrderList.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
具体的原因有时间了去研究下ormlite的源码,现在将这个问题记录下来,让遇到这个问题的同学不在抓狂