2012-02-11 85 views
1

试图简单地更新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%究竟给。

回答

0

尝试update命令

+0

在我上面的代码块中,我使用了更新命令(其中包括注释掉的尝试)。它会因数据库未打开或无法打开数据库而失败,具体取决于myDB.openDatabase是否被评论过。我认为问题在于数据库的打开。 – 2012-02-11 22:07:53

+0

您可以检查数据库是否真的在应用程序的文件夹中创建: /data/data/yourapp/databases – 2012-02-11 22:39:53

+0

是的,我可以导航到它,甚至打开表格并查看数据。它挑衅地在那里。 – 2012-02-11 23:11:59

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(); 
+0

我试过用数据库: myDB.openDatabase(“database”,null,MODE_PRIVATE); 但是,也没有工作,同样无法打开错误。此外,id真的不使用Helper类,我得到了一切,但最后一件事情在我的应用程序中工作,id真的不必学习如何使用新类并相应地更改我的应用程序。当然,如果需要的话,我会的,但ID不是。我真的认为问题在于打开数据库。 – 2012-02-11 22:13:17

相关问题