为什么我收到错误,Table * tableTame *没有名为* columnName *的列

时间:2014-04-25 14:03:19

标签: android eclipse sqlite database-connection adt

尝试按照StackOverflow上的其他帖子更新数据库版本,但无济于事

本质上它是一个Android应用程序,它在数据库中添加一个条目并显示在列表视图中。但是,当我调用insertA方法时,我在logcat中得到以下错误,我认为这是导致错误的原因)

 04-25 13:47:08.697: E/SQLiteLog(1783): (1) table Adb has no column named P
04-25 13:47:08.747: E/SQLiteDatabase(1783): Error inserting progress=aa MP=aa AN=aa MC=aa WD=aa
04-25 13:47:08.747: E/SQLiteDatabase(1783): android.database.sqlite.SQLiteException: table A has no column named P (code 1): , while compiling: INSERT INTO A(P,MP,AN,MC,WD) VALUES (?,?,?,?,?)

问题是,为什么在能够制造其他而不是P的情况下没有名为P的列?

public void onCreate(SQLiteDatabase database) {

    String SQLiteQuery = "CREATE TABLE assignments ( " +
            "assignmentID INTEGER PRIMARY KEY," +
            "moduleCode TEXT, " +
            "assignmentName TEXT, " +
            "whenDue TEXT, " +
            "marksProportion TEXT, " +
            "progress TEXT " + ")";

database.execSQL(SQLiteQuery);

}

@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
    String query = "DROP TABLE IF EXISTS assignments";

    database.execSQL(query);
    onCreate(database);
}

//key valued pair hash map passes all values into database
public void insertAssignment (HashMap<String, String> queryValues)
{
    SQLiteDatabase database = this.getWritableDatabase();

    ContentValues values = new ContentValues();

    values.put("moduleCode", queryValues.get("moduleCode"));
    values.put("assignmentName", queryValues.get("assignmentName"));
    values.put("whenDue", queryValues.get("whenDue"));
    values.put("marksProportion", queryValues.get("marksProportion"));
    values.put("progress", queryValues.get("progress"));

    database.insert("assignments", null, values);
    database.close();
}

1 个答案:

答案 0 :(得分:1)

从您最初的问题:

String SQLiteQuery = "CREATE TABLE Adb( " +
    :
    "WD TEXT, " +
    "MP TEXT " +
    "P TEXT " + ")";

您需要在MP TEXT之后使用逗号,就像之前的所有其他列一样。

你有什么:

CREATE TABLE Adb( ... WD TEXT, MP TEXT P TEXT )
                                  ^^^^^^
                               Problem here.

但是,如果你现在说你已经添加了逗号并且问题仍然存在,则很可能是数据库不是正在按预期创建。

您应该在onUpgradeonCreate调用中放置调试语句,看看是否已完成此操作。如果没有,请找出他们未被调用的原因。


另一种可能性是,由于您过分渴望保护您的列名,您在转录时犯了错误或删除了一些重要的信息。

我不完全确定为什么你认为你需要保护像progressmoduleCode等列名这样珍贵的IP(特别是因为我们可以看到它们)在编辑历史中仍然),但你应该知道这样的尝试使我们更难帮助你,而不是更容易: - )