1、基本概念
什么是SQLite数据库?
免费开源的,应用在嵌入式设备上的关系型数据库
特点:
1)客户端和服务器在同一进程中运行
2)单个文件进行数据存储,权限跟文件的权限有关系
3)可移植性好,可以编译在其他的应用程序中
最新的版本3.0
下载地址:http://www.sqlite.org
2、SQLite使用入门
导入类库到工程
Libsqlite3.0.dylib
//定义数据库文件的路径
1)打开(或创建)数据表
2)编译SQL语句
3)执行SQL语句
4)销毁对象
5)关闭SQLite
3、创建一个user表(create table xxx)
//首先使用sqlite数据库
sqlite3 *sqlite=nil;
//创建数据库文件NS
NSString *dbfilePath = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents/db.sqlite"];
//打开数据库 sqlite3_open(数据库文件路径,sqlite的指针)
int result = sqlite3_open([dbfilePathUTF8String], &sqlite);
if (result!=SQLITE_OK) {
//创建失败了
NSLog(@"数据文件创建失败!");
sqlite3_close(sqlite); //关闭数据库
return ;
}
//执行创建表的SQL语句
NSString *sql = @"create tableuser(uid text primary key,name text,phonenum text)";
char *err;
result = sqlite3_exec(sqlite, [sqlUTF8String], NULL, NULL, &err);
if (result!=SQLITE_OK) {
NSLog(@"sql语句执行错误!\n %s",err);
sqlite3_close(sqlite); //关闭数据库
return ;
}
NSLog(@"数据库表创建成功~");
//关闭数据库
sqlite3_close(sqlite); //关闭数据库
4、向表中插入数据(insert into xxx)
//打开数据库
//首先使用sqlite数据库
sqlite3 *sqlite=nil;
//定义预编译的指针
sqlite3_stmt *stmt;
//创建数据库文件
NSString *dbfilePath = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents/db.sqlite"];
//打开数据库 sqlite3_open(数据库文件路径,sqlite的指针)
int result = sqlite3_open([dbfilePathUTF8String], &sqlite);
if (result!=SQLITE_OK) {
//创建失败了
NSLog(@"数据库打开失败!");
sqlite3_close(sqlite); //关闭数据库
return ;
}
//执行sql
//NSString *sql =@"insert into user values('3','李四','0312-3838438')";
//采用预编译的方式sql语句参数的绑定的问题
NSString *sql = @"insert into uservalues(?,?,?)";
//sql语句的预编译
result = sqlite3_prepare_v2(sqlite, [sqlUTF8String], -1, &stmt, NULL);
if (result!=SQLITE_OK) {
NSLog(@"sql语句编译错误!\n ");
sqlite3_close(sqlite); //关闭数据库
return ;
}
//绑定一个参数
sqlite3_bind_text(stmt, 1, [@"4"UTF8String], -1, NULL);
sqlite3_bind_text(stmt, 2,[@"凤姐" UTF8String], -1, NULL);
sqlite3_bind_text(stmt, 3,[@"0312-3838438" UTF8String], -1, NULL);
//执行sql
result = sqlite3_step(stmt);
if (result == SQLITE_ERROR || result ==SQLITE_MISUSE) {
NSLog(@"sql语句执行错误!\n");
sqlite3_close(sqlite); //关闭数据库
return ;
}
NSLog(@"数据插入成功~");
sqlite3_finalize(stmt); //销毁stmt指针
//关闭数据库
sqlite3_close(sqlite); //关闭数据库
5、通过查询(select)查询sqlite中的数据
//首先使用sqlite数据库
sqlite3 *sqlite=nil;
//定义预编译的指针
sqlite3_stmt *stmt;
//创建数据库文件
NSString *dbfilePath = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents/db.sqlite"];
//打开数据库 sqlite3_open(数据库文件路径,sqlite的指针)
int result = sqlite3_open([dbfilePathUTF8String], &sqlite);
if (result!=SQLITE_OK) {
//创建失败了
NSLog(@"数据库打开失败!");
sqlite3_close(sqlite); //关闭数据库
return ;
}
NSString *sql = @"select * from userwhere uid>=?";
result = sqlite3_prepare_v2(sqlite, [sqlUTF8String], -1, &stmt, NULL);
if (result!=SQLITE_OK) {
NSLog(@"sql语句编译错误!\n ");
sqlite3_close(sqlite); //关闭数据库
return ;
}
//uid>1
sqlite3_bind_text(stmt, 1, [@"1"UTF8String], -1, NULL);
//开始查询
result = sqlite3_step(stmt);
//遍历读取
while (result == SQLITE_ROW) {
//从数据表中获取数据
char *uid= (char*)sqlite3_column_text(stmt, 0);
char *name= (char*)sqlite3_column_text(stmt, 1);
char *phonenum= (char*)sqlite3_column_text(stmt, 2);
NSString *uidStr = [NSStringstringWithCString:uidencoding:NSUTF8StringEncoding];
NSString *nameStr = [NSStringstringWithCString:nameencoding:NSUTF8StringEncoding];
NSString *phonenumStr = [NSStringstringWithCString:phonenumencoding:NSUTF8StringEncoding];
NSLog(@"#uid:%@,name:%@,phonenum:%@\n",uidStr,nameStr,phonenumStr);
//查询下一行
result = sqlite3_step(stmt);
}
//关闭操作释放资源
sqlite3_finalize(stmt);
sqlite3_close(sqlite);