尝试简单地更新SQLiteDatabase数据库中的行。我可以使用以下内容插入记录:
myDB.execSQL("INSERT INTO " + table + " (Date, Urine, Def, Flat, Snez, Mus)" + " VALUES ('" + dat + "', " + uri + ", " + def + ", " + fl + ", " + sn + ", " + mu + ");");
但是当我尝试用:
更新一行时myDB.execSQL("UPDATE " + TableMain + " SET " + field+ "=" + number + "WHERE Date = "+ DateMaker(today)+";");
我在LogCat中收到“数据库未打开”错误。所以我尝试用以下方式打开数据库:
SQLiteDatabase db=myDB.getWritableDatabase();
但我告诉eclipse getWritableDatabase()是未定义的,所以我尝试过:
myDB.openDatabase("myDB", null, MODE_PRIVATE);
然后我接受了错误“无法打开数据库文件”的问候。所以我改变了数据/ data / com.BodyTracker /数据库的路径,所以......:
myDB.openDatabase("data/data/com.BodyTracker/database", null, MODE_PRIVATE);
我又一次无法打开数据库错误。我不知道为什么它无法打开它,它可以写入和读取数据库,它只是不会更新。仅供参考,这一切都发生在我的主要活动中,它扩展了TabActivity,而不是SQLiteDatabase。我没有使用DatabaseHelper,我太多了,并且它太复杂了我的简单需求(读入和读出6个值,并更新它们)。
我在哪里创建数据库:
myDB = this.openOrCreateDatabase("DatabaseName", MODE_PRIVATE, null);
/* Create a Table in the Database. */
myDB.execSQL("CREATE TABLE IF NOT EXISTS "
+ TableMain
+ " (Date VARCHAR, Urine INT(3), Def INT(3), Flat INT(3), Snez INT(3), Mus INT(3));");
我的更新代码:
public int UpdateDB(String field, int number)
{
//SQLiteDatabase db=myDB.getWritableDatabase();
ContentValues cv=new ContentValues();
cv.put("Urine", number);
cv.put("Def", number);
cv.put("Flat", number);
cv.put("Snez", number);
cv.put("Mus", number);
cv.put("Date", DateMaker(today));
myDB.openDatabase("data/data/com.BodyTracker/database", null, MODE_PRIVATE);
// myDB.rawQuery("UPDATE " + TableMain + " SET " + field+ "=" + number + "WHERE Date =? ", new String[]{DateMaker(today)});
// myDB.execSQL("UPDATE " + TableMain + " SET " + field+ "=" + number + "WHERE Date = "+ DateMaker(today)+";");
return myDB.update(TableMain, cv, "Date=?", new String[]{DateMaker(today)});
}
请询问其他信息,这是我的第一个问题,所以不是100%准确给出的。
答案 0 :(得分:0)
尝试update命令
答案 1 :(得分:0)
这是因为您不应该使用data/data/com.BodyTracker/database
,只需使用database
此外,您似乎缺少一个SQLiteOpenHelpe扩展类 http://www.vogella.de/articles/AndroidSQLite/article.html#sqliteoverview_sqliteopenhelper
还有一点提示 使用预先准备好的插入语句
SQLiteStatement stmt = db.compileStatement("SELECT * FROM Foo WHERE bar = ?");
stmt.bindString(1, "foobar");
stmt.execute();