将NSMutableDictionary插入SQLite数据库的1个单元格中

时间:2014-01-09 16:47:16

标签: ios objective-c sqlite nsdictionary nsmutabledictionary

我希望有人可以帮助我。

我需要将NSMutableDictionary插入SQLite数据库的一个单元格中。我能够将字符串等插入数据库,但是当我尝试插入一个字典时,我得到一个语法错误:

**Can't run query 'BEGIN TRANSACTION; UPDATE Database SET Column1 = {
Bad = "";
"End_Time" = 4;
Good = "";
Moderate = "";
Note = "";
} WHERE Title = Name; COMMIT TRANSACTION;' error message: unrecognized token: "{"**

为此,我使用以下代码:

NSString *sql2 = [NSString stringWithFormat:@"UPDATE Database SET Column%@ = %@ WHERE Title = %@",previousQuestion,adictionary,Name];

任何人都可以帮助或建议不同的方法吗?我需要能够将键/值存储在1个单元格中,因为将有79个具有相似数据的单元格,我需要从数据库的特定列引用每个特定键。

我已经尝试将Dictionary转换为字符串(然后我会在检索时将字符串转回字典)但这会导致同样的问题。 有什么建议吗?

非常感谢, 安德鲁

2 个答案:

答案 0 :(得分:7)

他们有两种方法可以做到这一点。 第一种方式: -

归档您的NSMutableDictionary将其转换为NSData并将其存储在您的Sqlite列中,该数据类型应为blob类型。存档这样的东西,

 NSData *theDictionaryData = [NSKeyedArchiver archivedDataWithRootObject:yourDictionary]; 

将此数据绑定在sqlite中,

sqlite3_bind_blob(addStmt, 5, theDictionaryData, -1, SQLITE_TRANSIENT);

现在从sqlite中检索时间,

NSData *retrieveData = [[NSData alloc] initWithBytes:sqlite3_column_blob(selectstmt, 4) length:sqlite3_column_bytes(selectstmt, 4)];

最后将其转换为NSDictionary,

 NSDictionary *dictionary = [NSKeyedUnarchiver unarchiveObjectWithData:retrieveData];

第二路: - 创建与NSDictionary的键数相等的列数。从每个密钥中提取数据并将其保存在各自的表列中。

答案 1 :(得分:0)

您不能只将Objective-C对象插入数据库。它必须是字符串,二进制数据或数字。在将其转换为字符串时,您还需要清理输入(以便它不包含SQL将以另一种方式解释的任何无效字符)。例如,如果您尝试插入一些SQL代码的字符串,则不希望它尝试执行该代码。它看起来像是挂在字符串中的{上。您可以将字典或字符串转换为NSData,并将其作为二进制数据插入数据库。