SQLite入门:3-数据记录的操作
在数据库中,对于数据记录的操作主要包括4类操作,即:增删改查。本节中,我们分别介绍基于SQLite数据库的增删改查操作的实现方式。
添加数据
在上一章节中,我们创建了联系人表,现在来添加一条联系人信息。添加数据需要使用使用INSERT语句。INSERT语句用于向数据库的某个表中添加新的数据行。INSERT语句语法如下:
INSERT INTO TABLE_NAME (column1, column2,...columnN)]
VALUES (value1, value2,...valueN);
INSERT语句中,column1, column2,...columnN 是要插入数据的表中的列名。
如果要为表中的所有列添加值,也可以不需要在 SQLite 查询中指定列名称。但要确保值的顺序与列在表中的顺序一致。格式如下:
INSERT INTO TABLE_NAME VALUES (value1,value2,...valueN);
在下方的代码中,我们添加了insertContact:address:phone方法用来插入新的联系人。需要注意的是,INSERT语句中插入的字段是TEXT
类型,因此在拼接的时候需要加上单引号'。
- (BOOL)insertContact:(NSString *)name address:(NSString *)address phone:(NSString *)phone {
if (NULL == _db) { //1
NSLog(@"数据库不存在,添加联系人失败");
return NO;
}
char *errMsg = NULL;
// 拼接SQL语句
NSString *sqlString = [NSString stringWithFormat:@"INSERT INTO CONTACTS (name, address, phone) VALUES ('%@', '%@', '%@');", name, address, phone]; //2
const char *sql = [sqlString UTF8String];
if (sqlite3_exec(_db, sql, NULL, NULL, &errMsg) != SQLITE_OK) { //3
NSLog( @"添加联系人失败");
return NO;
}
NSLog( @"添加联系人成功");
return YES;
}
查询数据
添加完联系人,我们可以使用通过SELECT语句来查询联系人信息。
SELECT语句用于从 SQLite 数据库的表中获取数据,并以结果表的形式返回数据,这些结果表也被称为结果集。SELECT语句的基本语法如下:
SELECT column1, column2, columnN FROM table_name;
在SELECT语句中,column1, column2...是需要获取的表中的字段。如果需要获取所有可用的字段,那么可以使用下面的语法:
SELECT * FROM table_name;
在下方的代码中,我们创建了一个printAllContact方法来查询出联系人表中所有的联系人数据。
- (void)printAllContact {
if (NULL == _db) { //1
NSLog(@"数据库不存在:printAllContact");
return;
}
// 拼接SQL语句
const char *sql = "SELECT * FROM CONTACTS"; //2
sqlite3_stmt *stmt = NULL;
if (sqlite3_prepare_v2(_db, sql, -1, &stmt, nil) == SQLITE_OK) { //3
while (sqlite3_step(stmt)==SQLITE_ROW) { //4
char *name = (char *)sqlite3_column_text(stmt, 1); //5
NSString *nameString = [[NSString alloc] initWithUTF8String:name];
char *address = (char *)sqlite3_column_text(stmt, 2);
NSString *addressString = [[NSString alloc] initWithUTF8String:address];
char *phone = (char *)sqlite3_column_text(stmt, 3);
NSString *phoneString = [[NSString alloc] initWithUTF8String:phone];
NSLog(@"name: %@, address: %@, phone: %@", nameString, addressString, phoneString);
}
sqlite3_finalize(stmt); //6
}
}
在上述查询代码操作中需要注意以下几点。
- sqlite3_prepare_v2是执行语句前编译语句, 如果返回SQLITE_OK表示查询成功。
- sqlite3_step为执行查询语句,如果返回SQLITE_ROW则表示查询到记录。
- sqlite3_column_text用于获取查询到记录的值。这里需要根据实际的类型使用不同的方法来获取。
- sqlite3_finalize语句需要和sqlite3_prepare_v2成对出现,否则会造成内存泄漏。
删除数据
DELETE语句用于删除表中已有的记录。另外,DELETE语句可以添加 WHERE 条件,来删除所有满足查询条件的记录,同时可以使用 AND 或 OR 运算符来编写组合条件。如果DELETE语句不添加WHERE条件,表中所有的记录都会被删除。带有 WHERE条件的DELETE语句的基本语法如下:
DELETE FROM table_name
WHERE [condition];
在下方的代码中,我们编写deleteAllContactWithName:方法来删除指定名称的联系人。
- (BOOL)deleteAllContactWithName:(NSString *)name {
if (NULL == _db) { //1
NSLog(@"数据库不存在,删除联系人失败");
return NO;
}
char *errMsg = NULL;
// 拼接SQL语句
NSString *sqlString = [NSString stringWithFormat:@"DELETE FROM CONTACTS WHERE name='%@'", name]; //2
const char *sql = [sqlString UTF8String];
if (sqlite3_exec(_db, sql, NULL, NULL, &errMsg) != SQLITE_OK) { //3
NSLog( @"删除联系人失败");
return NO;
}
NSLog( @"删除联系人成功");
return YES;
}
修改数据
UPDATE语句用于修改表中已有的记录。可以使用带有 WHERE 条件的 UPDATE 语句来更新选定行,否则所有的行都会被更新。带有 WHERE 条件的 UPDATE 语句的基本语法如下:
UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];
在下方的代码中,我们编写updatePhone:forContactWithName:方法来更新指定用户的手机号。
- (BOOL)updatePhone:(NSString *)phone forContactWithName:(NSString *)name {
if (NULL == _db) { //1
NSLog(@"数据库不存在,更新联系人失败");
return NO;
}
char *errMsg = NULL;
// 拼接SQL语句
NSString *sqlString = [NSString stringWithFormat:@"UPDATE CONTACTS SET phone = '%@' WHERE name='%@'", phone, name]; //2
const char *sql = [sqlString UTF8String];
if (sqlite3_exec(_db, sql, NULL, NULL, &errMsg) != SQLITE_OK) { //3
NSLog( @"更新联系人失败");
return NO;
}
NSLog( @"更新联系人成功");
return YES;
}
示例代码
https://github.com/99ios/13.5.3
最后编辑时间为: September 26th , 2017 at 06:10 am
本文由 99ios 创作,转载请注明出处