2

我不是数据库专家,但我必须在我刚刚创建的 Android 新应用程序中处理一个,其中包括 SQLite。我有 2 张桌子,我们称它们为WordsChars单词主要记录用户输入的单词,如字典。Chars旨在记录添加到Words表中的单词中包含的任何新单个字符,并计算任何字符包含在Words表中的次数。

在这种情况下,我决定创建一个触发器来更新Chars表,每次在Words中添加/删除/修改一个新单词并且它似乎按预期工作,我现在的问题是,我应该如何迭代新输入的任何字符单词?我发现 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 回答