No.07 Xcode(5.1.x) 使用SQLite
2014-07-16 17:16
239 查看
1.需要在工程配置中加入libsqlite3.dylib
2.在代码中引入库文件sqlite3.h
3.需要用到的接口函数大致如下:
4.程序因意外而中断时, 已经执行的数据库操作依然会保留下来
Mac中已经自带了sqlite3程序, 我们可以通过Mac终端来查看SQLite数据库, 测试SQL语句:
1.输入命令 SQLITE3 -column -header /filepath/xxx.sqlite 可以打开数据库, 进入数据库操作的状态, 注意路径中的空格问题
2.数据库操作状态可以使用以下命令:
.tables ==> 查看数据库中有哪些表
.quit ==> 退出数据库操作的状态, .exit命令也是这个效果
3.数据库操作状态输入SQL语句, 并以分号结尾, 可以执行SQL语句
创建: CREATE TABLE IF NOT EXISTS userInfo (id INTEGER PRIMARY KEY AUTOINCREMENT, uid TEXT, pwd TEXT);
销毁: DROP TABLE userInfo;
添加: INSERT INTO userInfo (uid, pwd) VALUES ('kitty', '123456');
删除: DELETE FROM userInfo;
查询: SELECT * FROM userInfo;
2.在代码中引入库文件sqlite3.h
3.需要用到的接口函数大致如下:
sqlite3_open | 打开或者创建数据库文件 |
sqlite3_close | 关闭由sqlite3_open建立的连接 |
sqlite3_exec | sqlite3_prepare_v2,sqlite3_step()和sqlite3_finalize()的封装,能让程序多次执行sql语句而不要写许多重复的代码 |
sqlite3_prepare_v2 | 可以理解为数据库操作的开始 |
sqlite3_step | 可以理解为数据库操作的过程 |
sqlite3_finalize | 可以理解为数据库操作的结束 |
sqlite3_column_int sqlite3_column_text sqlite3_column_blob | sqlite3_step时, 通过这些函数从数据库操作中取到某行列那个单元格的值 |
#import "sqlite3.h" typedef void(^sqlite3_result)(sqlite3_stmt* ppStmt); int sqlite3_search(sqlite3* db, const char* sql, sqlite3_result result) { sqlite3_stmt* statement = 0; int ret = sqlite3_prepare_v2(db, sql, -1, &statement, NULL); if (ret != SQLITE_OK) { NSLog(@"sqlite3_search failed. ret=%d, sql=%s", ret, sql); } else while (sqlite3_step(statement) == SQLITE_ROW) { result(statement); } sqlite3_finalize(statement); return ret; } - (void)buttonClicked:(UIButton*)sender { NSString* filepath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"userinfo.dat"]; NSLog(@"%@", filepath); // 启动程序时, 如果文件存在, 删除它 NSFileManager* fileManager = [NSFileManager defaultManager]; if ([fileManager fileExistsAtPath:filepath] == YES) [fileManager removeItemAtPath:filepath error:nil]; sqlite3* database = 0; NSString* sql = nil; char* err = 0; int ret = 0; // 打开或创建文件 ret = sqlite3_open([filepath UTF8String], &database); if (ret != SQLITE_OK) { NSLog(@"sqlite3_open failed. ret=%d", ret); return; } // 创建表 sql = @"CREATE TABLE IF NOT EXISTS userinfo (userid INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT, password TEXT)"; ret = sqlite3_exec(database, [sql UTF8String], NULL, NULL, &err); if (ret != SQLITE_OK) { NSLog(@"sqlite3_exec failed. ret=%d, err=%s, sql=%@", ret, err, sql); } // 插入数据 for (int i = 0; i < 4; i++) { sql = [NSString stringWithFormat:@"INSERT INTO userinfo (username, password) VALUES('name%02d', 'pswd%03d')", i, i]; ret = sqlite3_exec(database, [sql UTF8String], NULL, NULL, &err); if (ret != SQLITE_OK) { NSLog(@"sqlite3_exec failed. ret=%d, err=%s, sql=%@", ret, err, sql); } } // 删除数据 sql = @"DELETE FROM userinfo WHERE username='name02'"; ret = sqlite3_exec(database, [sql UTF8String], NULL, NULL, &err); if (ret != SQLITE_OK) { NSLog(@"sqlite3_exec failed. ret=%d, err=%s, sql=%@", ret, err, sql); } // 修改数据 sql = @"UPDATE userinfo SET password='123456' WHERE username='name01'"; ret = sqlite3_exec(database, [sql UTF8String], NULL, NULL, &err); if (ret != SQLITE_OK) { NSLog(@"sqlite3_exec failed. ret=%d, err=%s, sql=%@", ret, err, sql); } // 查询数据 sql = @"SELECT userid, username, password FROM userinfo"; ret = sqlite3_search(database, [sql UTF8String], ^(sqlite3_stmt *ppStmt) { NSInteger userid = sqlite3_column_int(ppStmt, 0); NSString* username = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(ppStmt, 1)]; NSString* password = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(ppStmt, 2)]; NSLog(@"userid=%d, username='%@', password='%@'", userid, username, password); }); // 关闭文件 sqlite3_close(database); }
Mac中已经自带了sqlite3程序, 我们可以通过Mac终端来查看SQLite数据库, 测试SQL语句:
1.输入命令 SQLITE3 -column -header /filepath/xxx.sqlite 可以打开数据库, 进入数据库操作的状态, 注意路径中的空格问题
2.数据库操作状态可以使用以下命令:
.tables ==> 查看数据库中有哪些表
.quit ==> 退出数据库操作的状态, .exit命令也是这个效果
3.数据库操作状态输入SQL语句, 并以分号结尾, 可以执行SQL语句
创建: CREATE TABLE IF NOT EXISTS userInfo (id INTEGER PRIMARY KEY AUTOINCREMENT, uid TEXT, pwd TEXT);
销毁: DROP TABLE userInfo;
添加: INSERT INTO userInfo (uid, pwd) VALUES ('kitty', '123456');
删除: DELETE FROM userInfo;
查询: SELECT * FROM userInfo;
相关文章推荐
- 在 Win 7 下使用 VirtualBOX 虚拟机安装 OS X 10.8 Mountain Lion 及 XCode 4.4.1 (iOS SDK5.1) 作开发
- Xcode 5.1 编译模拟器以及真机都能使用的静态库
- iphone xcode 使用database 数据库 sqlite3的使用注意项总结
- Xcode 5.1 编译模拟器以及真机都能使用的静态库
- mac 下使用Xcode 5.1 编译Vmime笔记
- No.08 Xcode(5.1.x) 使用FFmpeg
- sqlite3数据的使用(xcode 7,ios9)
- 【xcode】最新版xcode4.6.X使用老的simulator6.0 5.1 5.0
- unity 使用xcode5.1 launching iOS project via Xcode4 failed
- unity 使用xcode5.1 launching iOS project via Xcode5 failed
- Xcode5.1默认使用ARC,如何关闭ARC
- xcode4.3.2 使用sqlite3的准备
- iphone xcode 使用database 数据库 sqlite3的使用注意项总结
- Xcode 5.1 编译模拟器以及真机都能使用的静态库
- swift开发笔记8 - sqlite3数据的使用(xcode 7,ios9)
- swift开发笔记8 - sqlite3数据的使用(xcode 7,ios9)
- SQLITE3 使用总结(4)
- [转]使用SQLite进行网站搜索
- 转载:如何使用XCodeFactory自动生成XML配置文件和对应的解析类
- SQLITE3 使用总结(2)