先导入sqlite3.h的头文件
#import "ViewController.h"
#import
#define kDatabaseFilePath [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/User.sqlite"]
创建数据库文件
- (void)createDataBase {
NSFileManager *manager = [NSFileManager defaultManager];
if (![manager fileExistsAtPath:kDataBaseFilePath]) {
[manager createFileAtPath:kDataBaseFilePath contents:nil attributes:nil];
}
NSLog(@"%@", kDataBaseFilePath);
}
DDL 数据定义语言
创建表格
- (void)cratteTable {
sqlite3 *sql = NULL;
int result = sqlite3_open([kDataBaseFilePath UTF8String], &sql);
if (result != SQLITE_OK) {
NSLog(@"打开失败");
return;
}
NSString *sqlString = @"CREATE TABLE user (id integer PRIMARY KEY AUTOINCREMENT, user_name text UNIQUE NOT NULL, password text NOT NULL)";
/** * 执行DDL sql语句 * * @param sqlite3 数据库指针 * @param sql SQl语句 * @param callback 执行完成的回调,C语言中的函数指针 * @param void* 回调中的第一个参数 * @param errmsg 错误信息 * * @return int */
char *errmsg;
result = sqlite3_exec(sql, [sqlString UTF8String], NULL, NULL, &errmsg);
if (result == SQLITE_OK) {
NSLog(@"执行成功,表格创建");
}else {
NSLog(@"表格创建失败:%s", errmsg);
}
sqlite3_close(sql);
}
sqlite3_exec(sql, [sqlString UTF8String], NULL, NULL, &errmsg) == SQLITE_OK;
DML 数据操作语言
插入数据
- (void)insertDataWithUserName:(NSString *)userName {
sqlite3 *sqlite = NULL;
int result = sqlite3_open([kDataBaseFilePath UTF8String], &sqlite);
if (result != SQLITE_OK) {
NSLog(@"打开失败");
return;
}
NSString *sqlString = @"INSERT INTO user (id, user_name, password) VALUES(?,?,?)";
sqlite3_stmt *stmt = NULL;
/** * 编译一个DML的 SQL语句 * * @param sqlite3 数据库指针 * @param zSql SQl语句 * @param nByte SQL语句的长度 -1表示系统自动计算字符串长度 * @param ppStmt 句柄二级指针 * @param pzTail 编译结束后,剩余的未编译字符串回传 * * @return int */
result = sqlite3_prepare_v2(sqlite, [sqlString UTF8String], -1, &stmt, NULL);
if (result != SQLITE_OK) {
NSLog(@"语句编译出错");
sqlite3_close(sqlite);
return;
}
/** * 绑定integer数据 * * 参数1 需要绑定的SQL语句所在的句柄 * 参数2 需要绑定的数据在SQL语句中所在的位置 * 参数3 绑定的数据 */
sqlite3_bind_int(stmt, 1, 1000);
/** * 绑定text数据 * * 参数1 需要绑定的SQL语句所在的句柄 * 参数2 需要绑定的数据在SQL语句中所在的位置 * 参数3 绑定的C语言字符串 * 参数4 字符串的长度 -1代表自动计算 * 参数5 绑定完成的回调函数 */
sqlite3_bind_text(stmt, 2, [userName UTF8String], -1, NULL);
sqlite3_bind_text(stmt, 3, [@"123456" UTF8String], -1, NULL);
result = sqlite3_step(stmt);
if (result == SQLITE_DONE) {
NSLog(@"数据插入完成");
}else {
NSLog(@"数据插入失败");
}
sqlite3_finalize(stmt);
sqlite3_close(sqlite);
}
//注:执行的DML sql语句返回值为SQLITE_DONE sqlite3_step(stmt) == SQLITE_DONE;
DQL 数据查询语言
查询数据
- (void)searchData {
sqlite3 *sqlite = NULL;
int result = sqlite3_open([kDataBaseFilePath UTF8String], &sqlite);
if (result != SQLITE_OK ) {
NSLog(@"数据库打开失败");
return;
}
NSString *sqlString = @"SELECT user_name, password FROM user WHERE id > ?";
sqlite3_stmt *stmt= NULL;
result = sqlite3_prepare_v2(sqlite, [sqlString UTF8String], -1, &stmt, NULL);
if (result != SQLITE_OK) {
NSLog(@"语句编译失败");
sqlite3_close(sqlite);
return;
}
sqlite3_bind_int(stmt, 1, 1050);
while (sqlite3_step(stmt) == SQLITE_ROW) {
NSString *userName = [NSString stringWithFormat:@"%s", sqlite3_column_text(stmt, 0)];
NSString *password = [NSString stringWithFormat:@"%s", sqlite3_column_text(stmt, 1)];
NSLog(@"用户名:%@ 密码:%@", userName, password);
}
sqlite3_finalize(stmt);
sqlite3_close(sqlite);
}
//注:执行的DQL sql语句返回值为SQLITE_ROW sqlite3_step(stmt) == SQLITE_ROW;