SQLite的使用——bruceyou1990

前端之家收集整理的这篇文章主要介绍了SQLite的使用——bruceyou1990前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

本文教你如何使用sqlite

一. 创建数据库

  1. /*1 创建数据库---路径*/
  2. dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
  3. docsDir = [dirPaths objectAtIndex:0];
  4. /*2 创建数据库---db名字 databasePath这个地址*/
  5. // Build the path to the database file 关于数据库 根据docsDir的路径 找到contacts.db 这个数据库 databasePath这个地址
  6.  
  7. databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"contacts.db"]];

二. 数据的操作

  1. // filemgr 拿到数据库的管理权
  2. NSFileManager *filemgr = [NSFileManager defaultManager];
  3.  
  4. //判断databasePath 是否存在
  5. if ([filemgr fileExistsAtPath:databasePath] == NO)
  6. {
  7. //导数据操作 要把NSString转换为C 因为sqlite是C语言写的 它不能理解什么是NSString
  8. const char *dbpath = [databasePath UTF8String];
  9.  
  10.  
  11. //打开数据库 然后在判断 是否打开成功sqlITE_OK 默认为0打开成功
  12. if (sqlite3_open(dbpath,&contactDB)==sqlITE_OK)
  13. {
  14. char *errMsg;
  15. //一般看到sql这样的 就应该明白 这是一条sql 数据库语句
  16. const char *sql_stmt = "CREATE TABLE IF NOT EXISTS CONTACTS(ID INTEGER PRIMARY KEY AUTOINCREMENT,NAME TEXT,ADDRESS TEXT,PHONE TEXT)";
  17.  
  18.  
  19.  
  20. /* iOS中没有提供创建数据库的命令,当使用sqlite3_open时,如果数据库文件不存在会自行创建数据库,如果存在会打开数据库。打开数据库后就可以创建表并操作表内容了,iOS中的sqlite3使用sqlite3_exec来创建表、插入表内容修改内容删除内容等操作,使用sqlite3_prepare_v2来查询表。下面给给出了sqlite3_exec的封装:*/
  21.  
  22.  
  23.  
  24. //通过 sqlite3_exec 在已经创建好的 contactDB 里面创建一条 sql_stmt 这样的表格 错误信息 &errMsg 这里从封装好的 sql里面返回
  25. if (sqlite3_exec(contactDB,sql_stmt,NULL,&errMsg)!=sqlITE_OK) {
  26.  
  27. status.text = @"创建表失败\n";
  28. }
  29. }
  30. else
  31. {
  32. status.text = @"创建/打开数据库失败";
  33. }
  34. }

三. 数据库的读写

  1. //保存数据
  2. - (IBAction)SaveToDataBase:(id)sender
  3. {
  4. sqlite3_stmt *statement;
  5.  
  6. const char *dbpath = [databasePath UTF8String];
  7.  
  8. if (sqlite3_open(dbpath,&contactDB)==sqlITE_OK) {
  9. NSString *insertsql = [NSString stringWithFormat:@"INSERT INTO CONTACTS (name,address,phone) VALUES(\"%@\",\"%@\",\"%@\")",name.text,address.text,phone.text];
  10. const char *insert_stmt = [insertsql UTF8String];
  11. sqlite3_prepare_v2(contactDB,insert_stmt,-1,&statement,NULL);
  12. if (sqlite3_step(statement)==sqlITE_DONE) {
  13. status.text = @"已存储到数据库";
  14. name.text = @"";
  15. address.text = @"";
  16. phone.text = @"";
  17. }
  18. else
  19. {
  20. status.text = @"保存失败";
  21. }
  22. sqlite3_finalize(statement);
  23. sqlite3_close(contactDB);
  24. }
  25. }
  26.  
  27. //读取数据
  28. - (IBAction)SearchFromDataBase:(id)sender
  29. {
  30. const char *dbpath = [databasePath UTF8String];
  31. sqlite3_stmt *statement;
  32.  
  33. if (sqlite3_open(dbpath,&contactDB) == sqlITE_OK)
  34. {
  35. NSString *querysql = [NSString stringWithFormat:@"SELECT address,phone from contacts where name=\"%@\"",name.text];
  36. const char *query_stmt = [querysql UTF8String];
  37. if (sqlite3_prepare_v2(contactDB,query_stmt,NULL) == sqlITE_OK)
  38. {
  39. if (sqlite3_step(statement) == sqlITE_ROW)
  40. {
  41. NSString *addressField = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement,0)];
  42. address.text = addressField;
  43.  
  44. NSString *phoneField = [[NSString alloc] initWithUTF8String:(const char *)sqlite3_column_text(statement,1 )];
  45. phone.text = phoneField;
  46.  
  47. status.text = @"已查到结果";
  48. [addressField release];
  49. [phoneField release];
  50. }
  51. else {
  52. status.text = @"未查到结果";
  53. address.text = @"";
  54. phone.text = @"";
  55. }
  56. sqlite3_finalize(statement);
  57. }
  58.  
  59. sqlite3_close(contactDB);
  60. }
  61. }

猜你在找的Sqlite相关文章