0

我的 sqlite 数据库中有两个表。我想根据按钮单击对表数据库进行操作。当 button1 单击时,它将插入到 pdsource 表中,在 button2 上单击时,它将插入到 pdreview 表中。

按钮 1 功能正常。但是 Button2 单击会产生问题。

我的表创建脚本是

CREATE TABLE "pdsource" ("Id" INTEGER PRIMARY KEY  NOT NULL ,"AudioFileName" 
    TEXT,"AudioFilePath" TEXT,"TextFileName" TEXT,"TextFilePath" TEXT,"DateTime" 
    TEXT,"Duration" TEXT,"Attempts" TEXT)

CREATE TABLE pdreview(
    reviewId     INTEGER, 
    priid Integer, 
    fwords Text,
    Gr Text,
    dslow Text,
    orating Text,
    comments Text,
    FOREIGN KEY(reviewId) REFERENCES pdsource(id)
)

我将在此处粘贴LogCat错误

06-17 14:49:22.006: I/SqliteDatabaseCpp(6423): sqlite returned: error code = 1, msg = no such table: pdreview, db=/data/data/com.first.personalitydevelopment/databases/PersonalityDevelopment.db
06-17 14:49:22.042: E/SQLiteDatabase(6423): Error inserting orating=good Gr=Noun missing fwords=hmm prid=1 dslow=medium comments=Excellent
06-17 14:49:22.042: E/SQLiteDatabase(6423): android.database.sqlite.SQLiteException: no such table: pdreview: , while compiling: INSERT INTO pdreview(orating,Gr,fwords,prid,dslow,comments) VALUES (?,?,?,?,?,?)
4

2 回答 2

0

请参阅链接的第 4.3 节以创建一个帮助程序类来管理您的数据库。

http://www.vogella.com/articles/AndroidSQLite/article.html

此外,无需用引号将列名括起来。在 pdreview 的 create 语句中,声明了 priid,但在 insert 中,您引用了 prid。每次打开数据库启用外键时,还需要执行“PRAGMA foreign_keys = ON”。

检查这是否有效。

于 2013-06-17T10:03:38.027 回答
0

您的第二个表尚未创建。

要检查您的表是否在数据库中,您可以通过 adb 访问它

转到您的 android SDK > plaform-tools 目录并执行命令

>adb shell

>sqlite3 /data/data/com.first.personalitydevelopment/databases/PersonalityDevelopment.db

>.tables或者>select * from pdreview

*第一个返回你数据库的所有表

如果您的表不存在,则可能是由于脚本问题,请执行您的第二个表脚本。

如果它不是在那里创建的,那么您的脚本上有错误(我不知道 sqlite 是否敏感,因为我看到您的参考“id”不是“Id”,也许这是错误)。

如果您的表创建成功,您必须知道您不能修改以前创建的数据库。第一次创建数据库时,它将在您的 onCreate 处执行脚本,稍后,如果您想更新,您有两个选择:

  • 您的应用程序已上市:您必须更新数据库的版本,以便 android 执行 onUpgrade 函数,您必须删除旧表并执行新脚本。

  • 您正在开发:通过设置清除数据并重新执行onCreate(或卸载应用程序)

于 2013-06-17T10:04:14.347 回答