2

私はデータベースの専門家ではありませんが、SQLiteを含むAndroid用の新しいアプリでデータベースを処理する必要があります。2つのテーブルがあります。それらをWordsCharsと呼びましょう。単語は主に、辞書のようにユーザーが入力した単語を登録します。Charsは、 Wordsテーブルに追加された単語に含まれる新しい単一の文字を登録し、任意の文字がWordsテーブルに含まれる回数をカウントすることを目的としています。

このシナリオでは、 Wordsで新しい単語が追加/削除/変更されるたびに、 Charsテーブルを更新するトリガーを作成することにしました。これは期待どおりに機能するようです。私の質問は、新しく入力された文字の文字をどのように反復するかです。語?SQLにFOR..IN .. LOOPステートメントがあることがわかりましたが、私が理解できる限り、SQLiteでは使用できません。なにか提案を?

これは、データベースを最初から生成するために作成したスクリプトですが、文字が表示される回数を登録せず、登録するだけなので、完全ではありません。さらに、トリガー定義の「FOR」キーワードについて不平を言っています。

CREATE TABLE Words (id_word INTEGER PRIMARY KEY AUTOINCREMENT, meaning TEXT NOT NULL);
CREATE TABLE Chars (id_char INTEGER PRIMARY KEY AUTOINCREMENT, char TEXT UNIQUE);

CREATE TRIGGER NewWord BEFORE INSERT ON Words BEGIN
  FOR i IN 1..length(NEW.meaning) LOOP
    INSERT INTO Chars (char) VALUES (SUBSTR(NEW.meaning,i,1));
  END LOOP;
END;

ありがとう

4

1 に答える 1

1

組み込みデータベースとして、SQLiteにはFORのような制御フローステートメントはありませんが、含まれているアプリケーションがすべての制御ロジックを実装することを期待しています。

残念ながら、Androidの組み込みSQLite APIではユーザー定義関数の登録が許可されていないため、トリガーで文字の更新を行うことはできません。

Chars単語が挿入されるたびに、アプリから手動でテーブルを更新します。

于 2012-12-29T14:20:20.157 に答える