在没有DatabaseHelper的情况下在Android SQLiteDatabase上运行更新

时间:2012-02-11 19:34:39

标签: android

尝试简单地更新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%准确给出的。

2 个答案:

答案 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();