2011-03-02 71 views
1

我正在研究改进我之前为我的应用程序编写的数据库。以前的数据库工作正常,但只是混乱,我做了愚蠢的事情,尝试和清理它。这造成了一个不可思议的错误,我无法开始解释。经过多次追溯,最后回来,让数据库看起来,据我所知,与我以前的数据库相同,我仍然得到诅咒的错误。有谁知道什么是无效的表格异常?

错误:

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()),似乎这个问题它有表中没有任何数据。如果是这种情况,我应该得到一个空的游标返回不应该?或者我误解了我正在阅读的内容,并且确实表示无法找到表格?

+0

您是否检查过设备上实际存在的表格?当我在实际创建表之前尝试访问表时,我自己前一阵发现了这个问题。 – stealthcopter 2011-03-02 21:20:50

+0

不幸的是,我只是取消了我的手机,因此我无法很快得到确认。但我确实在SQL.helper类中放置了日志标记,以便在数据库创建时检查进度。这似乎是可以接受的。我会仔细看看。 – AedonEtLIRA 2011-03-02 21:48:18

+0

是的,所有的表格的确是创建的。 – AedonEtLIRA 2011-03-03 16:28:28

回答

-1

好的,我发现什么是错的。无效的表格异常隐藏了一个错误,表示数据库已正确创建。我的坏:P

编辑::这是一个抽象问题。由于我从DataTables扩展,但静态调用变量,它从未正确初始化。教训:不要为表格使用抽象类。除了它非常丑陋外,它也不能很好地工作。

+1

也许您可以提供代码片段,仅针对其他人绊倒相同或类似问题的其他人。可能会有所帮助:) – AndreasT 2011-05-08 09:20:41

相关问题