iOS之SQL语句详解
来源:互联网 发布:卡祖笛淘宝 编辑:程序博客网 时间:2024/06/07 07:17
SQL的使用步骤大致都差不多,接下来的这些方法能带你学习实用的SQL语句和函数的使用
// 需要在静态区定义一个指针 (让这个指针指向的对象 从程序开始到结束 一直存在 程序结束后被系统自动释放)static sqlite3 *db = nil;// 打开数据库- (sqlite3 *)openDB { // 判断数据库是否存在 如果存在直接返回 // 不存在 则创建一个并打开 if (db != nil) { return db; } // 不存在 则创建一个并打开 // 获取路径 NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; // 拼接数据库文件路径(拼接的数据库文件的名字) NSString *dbPath = [docPath stringByAppendingPathComponent:@"/Student.sqlite"]; NSLog(@"%@",dbPath); // 创建或者打开数据库 // 参数1 文件路径(需要把oc的字符串 转化成C语言的) dbPath.UTF8String // 参数2 数据库的地址 // 接收一下返回值 判断是否打开成功 int result = sqlite3_open(dbPath.UTF8String, &db); // 不为SQLITE_OK时 可以查表得到错误 if (result == SQLITE_OK) { NSLog(@"打开成功"); } else { NSLog(@"打开失败"); } return db;}// 关闭数据库- (void)closeDB { int result = sqlite3_close(db); // 判断是否关闭成功 if (result == SQLITE_OK) { NSLog(@"关闭成功"); // 把数据库的指针 重置为空 db = nil; // 如果关闭后没有置空 会导致野指针 } else { NSLog(@"关闭失败"); }}// 创建一张表- (void)createTable { // 注意:一定要在操作时 先打开数据库 // 操作完毕关闭数据库 // 打开数据库 db = [self openDB]; // 1.写sql语句 NSString *sql = @"create table IF Not exists LanOuStudent(number integer primary key not null,name text not null,gender text not null, age integer not null, imageData BLOB not Null)"; // 2.执行sql语句 // 准备与执行的操作 int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL); if (result == SQLITE_OK) { NSLog(@"创建成功"); } else { NSLog(@"创建列表失败"); } // 关闭数据库 [self closeDB];}// 插入数据- (void)insertTableWithStudent:(LanOuStudent *)student { // 打开数据库 db = [self openDB]; // 写sql语句 NSString *sql = @"insert into LanOuStudent(number, name, gender, age, imageData) values(?,?,?,?,?)"; // 创建一个跟随指针(指令集) sqlite3_stmt sqlite3_stmt *stmt = nil; // 执行sql语句 // 预执行函数 需要用跟随指针 绑定语句中的"?" // 然后一步一步执行(判断sql是否正确) int result = sqlite3_prepare_v2(db, sql.UTF8String, -1, &stmt, NULL); if (result == SQLITE_OK) { // 绑定"?" 根据sql语句中的顺序来决定绑定"?"的顺序 // 注意: 绑定的顺序 从1开始 // 参数1 :跟随指针 // 参数2 :绑定的顺序 sqlite3_bind_int(stmt, 1, (int)student.number); sqlite3_bind_text(stmt, 2, student.name.UTF8String, -1, NULL); sqlite3_bind_text(stmt, 3, student.gender.UTF8String, -1, NULL); sqlite3_bind_int(stmt, 4, (int)student.age); // 绑定二进制数据(获取其中的内容) // 参数3: [student.imageData bytes] // 相当于获取到data的内容 // 参数4: (int)[student.imageData length] // 相当于获取到data的数据的长度 sqlite3_bind_blob(stmt, 5, [student.imageData bytes], (int)[student.imageData length], NULL); // 执行绑定的语句 sqlite3_step(stmt); NSLog(@"插入成功"); } else { NSLog(@"插入失败"); } // 不管插入是否成功 都要释放跟随指针 sqlite3_finalize(stmt); // 关闭数据库 [self closeDB];}// 删除数据(根据一个条件删除)- (void)deleteWithAge:(NSInteger)age { // 打开数据库// db = [self openDB];#pragma mark -- 不绑定删除 (需要拼接sql语句)// // 写SQL语句// NSString *sql = [NSString stringWithFormat:@"delete from LanOuStudent where age > '%ld'",age];// // // 执行sql语句// int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL);// // // 判断一下执行结果// if (result == SQLITE_OK) {// NSLog(@"删除成功");// } else {// NSLog(@"删除失败");// }// // // 关闭数据库// [self closeDB];#pragma mark -- 绑定删除法 // 打开数据库 db = [self openDB]; // 写sql语句 NSString *sql = @"delete from LanOuStudent where age > ?"; // 创建跟随指针 sqlite3_stmt *stmt = NULL; // 预执行语句 int result = sqlite3_prepare(db, sql.UTF8String, -1, &stmt, NULL); if (result == SQLITE_OK) { // 绑定问号 sqlite3_bind_int(stmt, 1, (int)age); // 执行跟随指针 绑定的语句 sqlite3_step(stmt); NSLog(@"删除成功"); } else { NSLog(@"删除失败"); } // 不管成功与否 都要释放跟随指针 sqlite3_finalize(stmt); [self closeDB];}// 更新- (void)updataAge:(NSInteger)age byName:(NSString *)name { // 打开数据库 db = [self openDB]; // 写sql语句 NSString *sql = [NSString stringWithFormat:@"update lanOuStudent set age = '%ld' where name = '%@'",age, name]; // 执行sql语句 int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, NULL); if (result == SQLITE_OK) { NSLog(@"更新成功"); } else { NSLog(@"更新失败"); } // 关闭数据库 [self closeDB];}// 查询数据(根据条件查询)- (LanOuStudent *)selectStudentWithName:(NSString *)name age:(NSInteger)age { // 打开数据库 db = [self openDB]; // 写sql语句 NSString *sql = @"select * from lanOuStudent where name = ? and age = ?"; // 创建跟随指针 sqlite3_stmt *stmt = NULL; // 创建一个对象 LanOuStudent *student = [[LanOuStudent alloc] init]; // 预执行sql int result = sqlite3_prepare(db, sql.UTF8String, -1, &stmt, NULL); if (result == SQLITE_OK) { // 绑定"?" sqlite3_bind_text(stmt, 1, name.UTF8String, -1, NULL); sqlite3_bind_int(stmt, 2, (int)age); // 查询时 SQLITE_ROW // 如果下一行准备好了 返回SQLITE_ROW // 这是可以继续查询 while (sqlite3_step(stmt) == SQLITE_ROW) { // 读取数据 // int iCol 列数 // 如果你查询所有的字段 那么这个列数 就根据你创建表的顺序一样 // 注意: 从0开始 // 如果你查询的是特定的字段 那么这个列数 就要根据你的sql语句来写 // 也是 从0开始 int number = sqlite3_column_int(stmt, 0); char *name = (char *)sqlite3_column_text(stmt, 1); char *gender = (char *)sqlite3_column_text(stmt, 2); int age = sqlite3_column_int(stmt, 3); // 读取二进制数据 NSData *imageData = [NSData dataWithBytes:sqlite3_column_blob(stmt, 4) length:sqlite3_column_bytes(stmt, 4)]; // 赋值model // stringWithUTF8String 把c语言字符串 转化成oc字符串 student.name = [NSString stringWithUTF8String:name]; student.number = number; student.gender = [NSString stringWithUTF8String:gender]; student.age = age; student.imageData = imageData; } NSLog(@"查询成功"); } else { NSLog(@"查询失败"); } // 释放跟随指针 sqlite3_finalize(stmt); // 关闭数据库 [self closeDB]; return student;}// 查询所有(返回一个数组)- (NSArray *)selectAllStudents { // 打开数据库 db = [self openDB]; // 写sql语句 NSString *sql = @"select * from lanOuStudent"; // 创建一个可变数组备用 NSMutableArray *stuArray = [NSMutableArray array]; // 创建跟随指针 sqlite3_stmt *stmt = nil; // 预执行 int result = sqlite3_prepare_v2(db, sql.UTF8String, -1, &stmt, NULL); if (result == SQLITE_OK) { while (sqlite3_step(stmt) == SQLITE_ROW) { // 读取数据 int number = sqlite3_column_int(stmt, 0); char *name = (char *)sqlite3_column_text(stmt, 1); char *gender = (char *)sqlite3_column_text(stmt, 2); int age = sqlite3_column_int(stmt, 3); // 读取二进制数据 NSData *imageData = [NSData dataWithBytes:sqlite3_column_blob(stmt, 4) length:sqlite3_column_bytes(stmt, 4)]; // 赋值model LanOuStudent *student = [[LanOuStudent alloc] init]; student.name = [NSString stringWithUTF8String:name]; student.number = number; student.gender = [NSString stringWithUTF8String:gender]; student.age = age; student.imageData = imageData; // 添加到数组 [stuArray addObject:student]; [student release]; } NSLog(@"成功"); } else { NSLog(@"失败"); } // 释放跟随指针 sqlite3_finalize(stmt); // 关闭数据库 [self closeDB]; return stuArray;}#pragma mark -- data数据插入和没有的区别/* // (1) 如果有data数据进行插入的话 // sqlite3_exec 这个函数会把data数据转化成字符串存入数据库 // (2) 如果插入的数据没有data数据的话 直接用sqlite3_exec这个函数插入数据就行 不需要绑定 如果使用 sqlite3_exec NSString *sql = @"insert into lanOuStudent(number, name, gender, age, imageData) values('%ld','%@','%@','%ld')"; - (void)text:(LanOuStudent *)student { NSString *sql = @"insert into lanOuStudent(number, name, gender, age, imageData) values('%ld','%@','%@','%ld')"; NSString *sqlNew = [NSString stringWithFormat:@"insert into lanOuStudent(number, name, gender, age, imageData) values('%ld','%@','%@','%ld')", student.number,student.name,student.gender,student.age]; } */
1 0
- iOS之SQL语句详解
- IOS中SQL语句
- IOS中SQL语句
- IOS中SQL语句
- IOS中SQL语句
- 主要SQL语句详解
- 常用SQL语句详解
- 常用SQL语句详解
- Informix SQL 语句详解
- sql连接语句详解
- 主要 SQL语句详解
- SQL Select语句详解
- Mysql SQL语句详解
- SQL语句详解
- 【详解】SQL语句
- SQL 语句详解
- sql关键语句详解
- SQL语句语法详解
- web自动化(9)----截图
- springMVC+mybatis框架
- Class.isAssignableFrom与 instanceof 区别
- 如何配置jdk 与tomcat
- IOS UITextView 和 UITextField 联想输入法字数限制
- iOS之SQL语句详解
- WIN7上调试TQ2440 USB下载
- 如何使用GDB显示不同C文件中的同名结构体内容
- DOS批处理对人脸库进行分类
- 七牛---关于C# SDK的各种Demo
- MOBIKE----IKEv2 Mobility and Multihoming Protocol
- UIWindow
- this关键字
- web三种跨域请求数据方法