我正在研究改进我之前为我的应用程序编写的数据库。以前的数据库工作正常,但只是混乱,我做了愚蠢的事情,尝试和清理它。这造成了一个不可思议的错误,我无法开始解释。经过多次追溯,最后回来,让数据库看起来,据我所知,与我以前的数据库相同,我仍然得到诅咒的错误。有谁知道什么是无效的表格异常?
错误:
03-02 10:38:30.205: ERROR/AndroidRuntime(505): FATAL EXCEPTION: JobLister: RunThread jobs
03-02 10:38:30.205: ERROR/AndroidRuntime(505): java.lang.IllegalStateException: Invalid tables
03-02 10:38:30.205: ERROR/AndroidRuntime(505): at android.database.sqlite.SQLiteDatabase.findEditTable(SQLiteDatabase.java:1313)
03-02 10:38:30.205: ERROR/AndroidRuntime(505): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1414)
03-02 10:38:30.205: ERROR/AndroidRuntime(505): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1370)
03-02 10:38:30.205: ERROR/AndroidRuntime(505): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1450)
03-02 10:38:30.205: ERROR/AndroidRuntime(505): at com.android.appion.arm.database.Database.getRecord(Database.java:120)
03-02 10:38:30.205: ERROR/AndroidRuntime(505): at com.android.appion.arm.database.Database.getRecord(Database.java:107)
03-02 10:38:30.205: ERROR/AndroidRuntime(505): at com.android.appion.arm.database.Database.getRecord(Database.java:97)
03-02 10:38:30.205: ERROR/AndroidRuntime(505): at com.android.appion.arm.activities.JobLister.getJobs(JobLister.java:69)
03-02 10:38:30.205: ERROR/AndroidRuntime(505): at com.android.appion.arm.activities.JobLister.access$3(JobLister.java:66)
03-02 10:38:30.205: ERROR/AndroidRuntime(505): at com.android.appion.arm.activities.JobLister$2.run(JobLister.java:52)
03-02 10:38:30.205: ERROR/AndroidRuntime(505): at java.lang.Thread.run(Thread.java:1020)
所以很自然我也跟着锯痕迹,看到它源于一个电话让我在我的活动之一,我已经保存在我的服务(自然)数据库。
从活动的数据库调用:
Cursor c = mService.getDatabase().getRecord(new Table.Jobs());
这一切都似乎是正确的。使用服务我得到数据库,并与数据库获取表作业的所有记录。
的getRecord方法步进和职位表定义:
public Cursor getRecord(DataTable table) {
return getRecord(table, null);
}
public Cursor getRecord(DataTable table, String[] columns) {
return getRecord(table, columns, null);
}
/**
* Return a Cursor with every item in which data is only coming from columns,
* and the records satisfies all selection requirements.
* @param table The table to query.
* @param columns The columns to retieve data.
* @param selection The requirements to base the data collection on. (WHERE statement
* without WHERE).
* @return The Cursor full of queried items.
*/
public Cursor getRecord(DataTable table, String[] columns, String selection) {
return mDB.query(table.TITLE, (columns == null) ? new String[] {"*"} : columns,
selection, null, null, null, null);
}
而且表:
public static class Jobs extends DataTable {
public static final String TITLE = "jobs";
public static final String[] FIELD = {"job_id",
"job_name", // User given name
"job_contact", // client
"job_location", // The location of the job
"job_notes",
"job_summary", // The byte object of a JobSummary
"wkb_name", // the workbench that is being used for the job
"job_startdate",
"job_enddate"};
public Jobs() { super(); }
public String getTable() {
return "create table " + TITLE +
"(" + FIELD[0] + " integer primary key autoincrement, " +
FIELD[1] + " text, " +
FIELD[2] + " blob, " +
FIELD[3] + " blob, " +
FIELD[4] + " text, " +
FIELD[5] + " blob, " +
FIELD[6] + " blob, " +
FIELD[7] + " text, " +
FIELD[8] + " text " +
");";
}
}
现在这种设计风格与我的过去数据的基础上完美地工作,现在是逐字逐句减去作业表扩展DataTable的事实,以便于由于抽象而创建初始数据库。
任何人都可以看到有什么不对吗?
编辑::
我阅读源的错误(SQLiteDatabase.findEditTable()
),似乎这个问题它有表中没有任何数据。如果是这种情况,我应该得到一个空的游标返回不应该?或者我误解了我正在阅读的内容,并且确实表示无法找到表格?
您是否检查过设备上实际存在的表格?当我在实际创建表之前尝试访问表时,我自己前一阵发现了这个问题。 – stealthcopter 2011-03-02 21:20:50
不幸的是,我只是取消了我的手机,因此我无法很快得到确认。但我确实在SQL.helper类中放置了日志标记,以便在数据库创建时检查进度。这似乎是可以接受的。我会仔细看看。 – AedonEtLIRA 2011-03-02 21:48:18
是的,所有的表格的确是创建的。 – AedonEtLIRA 2011-03-03 16:28:28