1. main.m文件
#import <Foundation/Foundation.h>
#import "SQLManger.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
SQLManger* sql = [SQLManger shareSqlManger];
[sql createTable];
//查
[sql selectMessage];
//增
// [sql IncreaseMessage];
//删
// [sql DeleteMessage];
//改
[sql changeMessage];
}
return 0;
}
2. SQLManger.h 文件
#import <Foundation/Foundation.h>
#import <sqlite3.h>
@interface SQLManger : NSObject
{
sqlite3* db;//声明数据库对象
}
//类方法单例创建实例对象的方法
+(SQLManger*)shareSqlManger;
//创建数据表
-(void)createTable;
//查询数据表数据
-(void)selectMessage;
//增加数据表数据
-(void)IncreaseMessage;
//删除数据表数据
-(void)DeleteMessage;
//改变数据表数据
-(void)changeMessage;
@end
3. SQLManger.m 文件
#import "SQLManger.h"
//声明一个全局的静态变量,来记录SQLManger对象是否被创建(定义一个静态区指针 连接数据库 让数据库再程序结束后自动释放)
static SQLManger* sqlManger = nil;
@implementation SQLManger
//类方法单例创建实例对象的方法
+(SQLManger*)shareSqlManger
{
if (sqlManger == nil) {
sqlManger = [[SQLManger alloc]init];
}
return sqlManger;
}
//创建数据表
-(void)createTable
{
// //获取文件的相对路径
// NSString* path = [[NSBundle mainBundle]pathForResource:@"nibaba" ofType:@"sqkute"];
// //读取plist文件的内容
// NSArray* arr = [NSArray arrayWithContentsOfFile:path];
// NSLog(@"arr == %@", arr);
// //获取家目录
// NSString* homePath = NSHomeDirectory();
// NSLog(@"家目录:%@",homePath);
// //获取Documents路经
// NSArray* pathArr1 = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// NSString* docuPath = [pathArr1 objectAtIndex:0];
// NSLog(@"Documents路径:%@",docuPath);
// NSString* path = [docuPath stringByAppendingPathComponent:docuPath];
// NSLog(@"path == %@", path);
// //这个只限于IOS应用在mac应用中就不适应
// //获取数据库路径
// NSString* path = @"/Users/user/Downloads/数据库";
// //文件管理器
// NSFileManager* fileManager = [NSFileManager defaultManager];
// //判断数据库是否存在
// BOOL fild = [fileManager fileExistsAtPath:path];
//
// 如果数据库存在,则用sqlite3_open直接打开(不要担心,如果数据库不存在sqlite3_open会自动创建)
// if (fild) {
// NSLog(@"文件库存在。。。。");
// }else{
// NSLog(@"文件库不存在。。。");
// }
//获取数据库路径
NSString* path = @"/Users/user/Downloads/数据库/nibaba.sqlite";
//打开数据库
//第一个参数是数据库的路径,c的字符串类型
//第二个参数是数据库的对象
//SQLITE_OK 是宏定义代表语句操作成功
if (sqlite3_open([path UTF8String], &db) == SQLITE_OK) {
//NSString* createTable = @"CREATE TABLE IF NOT EXISTS STUDENT (sid text primary key,name text)";
NSString* createTable=@"CREATE TABLE IF NOT EXISTS STUDENG (SID TEXT PRIMARY KEY,NAME TEXT);";
//执行创建表的aql语句
//第一个参数是数据库的对象
//第二个参数是sql语句,c的字符串类型
//第三个参数是回调方法
//第四个参数是回调方法的参数
//第五个参数是错误信
char* error;
//sqlite3_exec 打开数据库时,如果存在数据库就打开,如果不存在就会创建并打开
if (sqlite3_exec(db, [createTable UTF8String], nil, nil, &error) == SQLITE_OK) {
NSAssert(YES, @"数据表格创建成功%s", error);
NSLog(@"数据表格创建成功");
}else{
NSAssert(NO, @"数据表格创建失败%s", error);
NSLog(@"数据表格创建失败");
}
//关闭数据库
sqlite3_close(db);
}
}
//查询数据表数据
-(void)selectMessage
{
//获取数据库路径
NSString* path = @"/Users/user/Downloads/数据库/nibaba.sqlite";
//打开数据库
if(sqlite3_open([path UTF8String], &db) == SQLITE_OK){
//? 是占位符
NSString* selectSql = @"select *from areaCode where id=?";
//创建语句对象
sqlite3_stmt* stmt;
//执行sql语句的预处理
//第一个参数是数据库对象
//第二个参数是执行的sql语句
//第三个参数是语句的执行长度,-1代表全部执行
//第四个参数是语句对象
//第五个参数是没有执行的部分,一般会全部执行,一般填nil
sqlite3_prepare_v2(db, [selectSql UTF8String], -1, &stmt, NULL);
//绑定参数,并实现查找
//第一个参数是语句对象
//第二个参数是语句编号,从1开始
//第三个参数是所要绑定参数的值
sqlite3_bind_int(stmt, 1, 10);
//获取查询出来的值
if (sqlite3_step(stmt) == SQLITE_ROW) {
//获取一行数据有多少列
NSLog(@" ====== %d", sqlite3_column_count(stmt));
char* s = (char*)sqlite3_column_text(stmt, 1);
NSLog(@" ------ %@",[NSString stringWithFormat:@"%s", s]);
//获取ID的值
NSLog(@"------%d",sqlite3_column_int(stmt, 0));
sqlite3_finalize(stmt);//释放语句
}else{
sqlite3_finalize(stmt);//释放语句
sqlite3_close(db);
}
}else{
sqlite3_close(db);
}
}
//增加数据表数据
-(void)IncreaseMessage
{
//获取数据库路径
NSString* path = @"/Users/user/Downloads/数据库/nibaba.sqlite";
//打开数据库
if(sqlite3_open([path UTF8String], &db) == SQLITE_OK){
NSString *increase = @"insert into areaCode(id,location,countryCodeID) values (1,'镇魂街',02)";
char* error;
//sqlite3_exec 打开数据库时,如果存在数据库就打开,如果不存在就会创建并打开
if (sqlite3_exec(db, [increase UTF8String], nil, nil, &error) == SQLITE_OK) {
NSLog(@"增加数据表数据成功");
}else{
NSLog(@"增加数据表数据失败 == %s", error);
}
}
}
//删除数据表数据
-(void)DeleteMessage
{
//获取数据库路径
NSString* path = @"/Users/user/Downloads/数据库/nibaba.sqlite";
//打开数据库
if(sqlite3_open([path UTF8String], &db) == SQLITE_OK){
//删除id为1的一行数据,如果要删两行就 id = 1 or id = 10 ,删除id为1和10行的数据
NSString *Delete = @"delete from areaCode where id = 1";
char* error;
//sqlite3_exec 打开数据库时,如果存在数据库就打开,如果不存在就会创建并打开
if (sqlite3_exec(db, [Delete UTF8String], nil, nil, &error) == SQLITE_OK) {
NSLog(@"删除数据表数据成功");
}else{
NSLog(@"删除数据表数据失败 == %s", error);
}
}
}
//改变数据表数据
-(void)changeMessage
{
//获取数据库路径
NSString* path = @"/Users/user/Downloads/数据库/nibaba.sqlite";
//打开数据库
if(sqlite3_open([path UTF8String], &db) == SQLITE_OK){
NSString *change = @"update areaCode set location = '镇魂街' WHERE id = 1";
char* error;
//sqlite3_exec 打开数据库时,如果存在数据库就打开,如果不存在就会创建并打开
if (sqlite3_exec(db, [change UTF8String], nil, nil, &error) == SQLITE_OK) {
NSLog(@"改变数据表数据成功");
}else{
NSLog(@"改变数据表数据失败 == %s", error);
}
}
}
@end