尝试按照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 (?,?,?,?,?)
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();
}
答案 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.
但是,如果你现在说你已经添加了逗号并且问题仍然存在,则很可能是数据库不是正在按预期创建。
您应该在onUpgrade
和onCreate
调用中放置调试语句,看看是否已完成此操作。如果没有,请找出他们未被调用的原因。
另一种可能性是,由于您过分渴望保护您的列名,您在转录时犯了错误或删除了一些重要的信息。
我不完全确定为什么你认为你需要保护像progress
和moduleCode
等列名这样珍贵的IP(特别是因为我们可以看到它们)在编辑历史中仍然),但你应该知道这样的尝试使我们更难帮助你,而不是更容易: - )