在没有DatabaseHelper的情况下在Android SQLite数据库上运行更新
试图简单地更新SQLiteDatabase数据库中的一行。我可以插入精细的记录有:在没有DatabaseHelper的情况下在Android SQLite数据库上运行更新
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的“数据库未打开”错误。所以我尝试打开德datbase有:
SQLiteDatabase db=myDB.getWritableDatabase();
但是我通过Eclipse中getWritableDatabase()是未定义告诉,所以我尝试:
myDB.openDatabase("myDB", null, MODE_PRIVATE);
但随后即时通讯与错误招呼“无法打开数据库文件“。所以我改变了路径data/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%究竟给。
那是因为你不应该使用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();
我试过用数据库: myDB.openDatabase(“database”,null,MODE_PRIVATE); 但是,也没有工作,同样无法打开错误。此外,id真的不使用Helper类,我得到了一切,但最后一件事情在我的应用程序中工作,id真的不必学习如何使用新类并相应地更改我的应用程序。当然,如果需要的话,我会的,但ID不是。我真的认为问题在于打开数据库。 – 2012-02-11 22:13:17
在我上面的代码块中,我使用了更新命令(其中包括注释掉的尝试)。它会因数据库未打开或无法打开数据库而失败,具体取决于myDB.openDatabase是否被评论过。我认为问题在于数据库的打开。 – 2012-02-11 22:07:53
您可以检查数据库是否真的在应用程序的文件夹中创建: /data/data/yourapp/databases – 2012-02-11 22:39:53
是的,我可以导航到它,甚至打开表格并查看数据。它挑衅地在那里。 – 2012-02-11 23:11:59