【问题标题】:Is this Sqlite3 statement OK?这个 Sqlite3 语句可以吗?
【发布时间】:2012-12-30 11:54:52
【问题描述】:

谈到 sqlite,我是个菜鸟,不太清楚该怎么做。

我想要一个包含一堆行的数据库,每个行包含一个单词。当用户键入一个单词时,我将通过检查它是否在数据库中来验证它。

我猜我没有的东西,也不知道如何创建,是索引吗?我该如何插入?如何编写查询以利用索引?

我还有两列,“id 和 word”。有id好还是只占空间?

这是我目前得到的:

CREATE TABLE words (id INTEGER PRIMARY KEY, word VARCHAR(15));

我不希望单词超过 15 个字符,所以我设置了 VARCHAR(15);

INSERT INTO words(word) VALUES('hello');
INSERT INTO words(word) VALUES('bye');
etc. for all words

检查一个单词:

NSString *sql = [NSString stringWithFormat:@"SELECT EXISTS(SELECT 1 FROM words WHERE word=\"%@\" LIMIT 1)", word];
const char *sqlStatement = [sql UTF8String];

if (sqlite3_prepare_v2(db, sqlStatement, -1, &selectStmt, NULL) == SQLITE_OK)
{
    int count = 0; 
    while(sqlite3_step(selectStmt) == SQLITE_ROW)
    {
        count = sqlite3_column_int(selectStmt, 0);
    }

    NSLog(@"COUNT: %i",count);

    //If count is 1, we have a match.  
}

【问题讨论】:

  • 这里:NSLog(@"COUNT: %d",count);%d代替%i%d代表一个整数值。
  • 添加了关于如何在表上添加索引的说明,请查看我的答案。

标签: ios objective-c sql sqlite


【解决方案1】:

是的。你的陈述没问题。

您也可以使用' 而不是"

NSString *sql = [NSString stringWithFormat:@"SELECT EXISTS(SELECT 1 FROM words WHERE word='%@' LIMIT 1)", word];

有id好还是只占空间?

这取决于你的需要,我建议你应该保留一个Id 字段作为主键。


为了创建索引,您可以使用:

CREATE INDEX yourIndexName ON yourTableName ( yourColumnName )

更多关于索引检查sqlite

【讨论】:

  • @user1251004: 很高兴 :) 感谢您的评论 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
相关资源
最近更新 更多