ios – i386的未定义符号:“_sqlite3_open”,引用来自:error

前端之家收集整理的这篇文章主要介绍了ios – i386的未定义符号:“_sqlite3_open”,引用来自:error前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经创建了一个数据库类并打包了一些方法.但是,一旦建立项目…
  1. Undefined symbols for architecture i386:
  2. "_sqlite3_open",referenced from:
  3. -[MyDataBase openOrCreateDatabase:] in MyDataBase.o
  4. "_sqlite3_exec",referenced from:
  5. -[MyDataBase createTable:] in MyDataBase.o
  6. -[MyDataBase InsertTable:] in MyDataBase.o
  7. -[MyDataBase UpdataTable:] in MyDataBase.o
  8. -[MyDataBase querryTableByCallBack:] in MyDataBase.o
  9. "_sqlite3_close",referenced from:
  10. -[MyDataBase closeDatabase] in MyDataBase.o
  11. "_sqlite3_get_table",referenced from:
  12. -[MyDataBase querryTable:] in MyDataBase.o
  13. ld: symbol(s) not found for architecture i386
  14. clang: error: linker command @R_404_159@ with exit code 1 (use -v to see invocation)

这里有一些关键的方法

创建数据库

  1. -(BOOL)openOrCreateDatabase:(NSString*)dbName
  2. {
  3. self.m_dbName = dbName;
  4. NSArray *path =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
  5. NSString *documentsDirectory = [path objectAtIndex:0];
  6. if(sqlite3_open([[documentsDirectory stringByAppendingPathComponent:dbName] UTF8String],&m_sql) !=sqlITE_OK)
  7. {
  8. NSLog(@"创建数据库失败");
  9. return NO;
  10. }
  11. return YES;
  12. }

创建表:

  1. -(BOOL)createTable:(NSString*)sqlCreateTable
  2. {
  3. if (![self openOrCreateDatabase:self.m_dbName]) {
  4. return NO;
  5. }
  6. char *errorMsg;
  7. if (sqlite3_exec (self.m_sql,[sqlCreateTable UTF8String],NULL,&errorMsg) !=
  8. sqlITE_OK)
  9. {
  10. NSLog(@"创建数据表失败:%s",errorMsg);
  11. return NO;
  12. }
  13. [self closeDatabase];
  14. return YES;
  15. }

关闭数据库

  1. -(void)closeDatabase
  2. {
  3. sqlite3_close(self.m_sql);
  4. }
  5.  
  6. //insert
  7.  
  8. -(BOOL)InsertTable:(NSString*)sqlInsert
  9. {
  10. if (![self openOrCreateDatabase:self.m_dbName]) {
  11. return NO;
  12. }
  13. char* errorMsg = NULL;
  14. if(sqlite3_exec(self.m_sql,[sqlInsert UTF8String],&errorMsg) ==sqlITE_OK)
  15. { [self closeDatabase];
  16. return YES;}
  17. else {
  18. printf("更新表失败:%s",errorMsg);
  19. [self closeDatabase];
  20. return NO;
  21. }
  22. return YES;
  23. }

更新表:

  1. -(BOOL)UpdataTable:(NSString*)sqlUpdata{
  2. if (![self openOrCreateDatabase:self.m_dbName]) {
  3. return NO;
  4. }
  5. char *errorMsg;
  6. if (sqlite3_exec (self.m_sql,[sqlUpdata UTF8String],&errorMsg) !=sqlITE_OK)
  7. {
  8. [self closeDatabase];
  9. return YES;
  10. }else {
  11. return NO;
  12. }
  13.  
  14. return YES;
  15. }

选择记录:

  1. -(NSArray*)querryTable:(NSString*)sqlQuerry
  2. {
  3. if (![self openOrCreateDatabase:self.m_dbName]) {
  4. return nil;
  5. }
  6. int row = 0;
  7. int column = 0;
  8. char* errorMsg = NULL;
  9. char** dbResult = NULL;
  10. NSMutableArray* array = [[NSMutableArray alloc] init];
  11. if(sqlite3_get_table(m_sql,[sqlQuerry UTF8String],&dbResult,&row,&column,&errorMsg ) == sqlITE_OK)
  12. {
  13. if (0 == row) {
  14. [self closeDatabase];
  15. return nil;
  16. }
  17. int index = column;
  18. for(int i =0; i < row ; i++ ) {
  19. NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
  20. for(int j =0 ; j < column; j++ ) {
  21. if (dbResult[index]) {
  22. NSString* value = [[NSString alloc] initWithUTF8String:dbResult[index]];
  23. NSString* key = [[NSString alloc] initWithUTF8String:dbResult[j]];
  24. [dic setObject:value forKey:key];
  25. [value release];
  26. [key release];
  27. }
  28. index ++;
  29. }
  30. [array addObject:dic];
  31. [dic release];
  32. }
  33. }else {
  34. printf("%s",errorMsg);
  35. [self closeDatabase];
  36. return nil;
  37. }
  38. [self closeDatabase];
  39. return [array autorelease];
  40. }

解决方法

你需要将libsqlite库添加链接过程中.这可以在项目设置中完成,参见 https://stackoverflow.com/a/7623043/1091195.

猜你在找的iOS相关文章