0

sqlite データベースに 2 つのテーブルがあります。ボタンのクリックに基づいて、テーブル データベースを操作したいと考えています。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 を参照して、DB を管理するヘルパー クラスを作成します。

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

また、列名を引用符で囲む必要はありません。pdreview の create ステートメントでは priid が宣言されていますが、insert では prid を参照しています。また、外部キーを有効にするために、データベースを開くたびに「PRAGMAforeign_keys = ON」を実行する必要があります。

これが機能するかどうかを確認します。

于 2013-06-17T10:03:38.027 に答える
0

2 番目のテーブルは作成されていません。

テーブルがデータベース上にあるかどうかを確認するには、adb 経由でアクセスできます

Android SDK > platform-tools ディレクトリに移動し、コマンドを実行します。

>adb shell

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

>.tablesまた>select * from pdreview

*最初のものは、データベースのすべてのテーブルを返します

テーブルが存在しない場合は、スクリプトの問題が原因である可能性があり、2 つ目のテーブル スクリプトを実行します。

そこに作成されていない場合は、スクリプトにエラーがあります(参照「id」が「Id」ではないため、sqliteが機密であるかどうかはわかりません。おそらくこれがエラーです)。

テーブルが正常に作成された場合は、以前に作成されたデータベースを変更できないことを知っておく必要があります。データベースを初めて作成すると、onCreate でスクリプトが実行されます。後で更新する場合は、次の 2 つのオプションがあります。

  • あなたのアプリは市場に出回っています.AndroidがonUpgrade関数を実行するようにデータベースのバージョンを更新する必要があります.そこで古いテーブルを削除して新しいスクリプトを実行する必要があります.

  • 開発中: 設定でデータを消去すると、onCreate が再実行されます (またはアプリをアンインストールします)

于 2013-06-17T10:04:14.347 に答える