Sqlite的使用
来源:互联网 发布:天书残卷弓箭突破数据 编辑:程序博客网 时间:2024/05/04 20:38
(1)创建数据库,先创建数据库文件
NSString*pathString = [NSHomeDirectory()stringByAppendingString:@"/Documents/Note.sqlite"];
打开数据库
sqlite3_open()函数有两个参数第一个参数是路径的名字装换成utf8编码,第二个为数据库对象。此步骤为打开数据库,如果打开成功函数返回SQLITE_OK.调用打开数据库函数需用sqlite3_close(db);关闭函数关闭.
if(sqlite3_open([pathStringUTF8String], &db)!=SQLITE_OK) {
NSLog(@"打开数据库失败!");
sqlite3_close(db);
}else{
NSLog(@"打开数据库失败!");
sqlite3_close(db);
}else{
char *err;
创建SQL语句,此语句为创建表并指明表中包含的字段.
NSString*createSQL = [NSStringstringWithFormat:@"CREATE TABLE USER (name TEXT NOT NULL, age INTEGER, sex TEXT, image BLOB, id INTEGER PRIMARY KEY AUTOINCREMENT)"];
通过调用sqlite3_exec()函数来执行SQL语句,此函数第一个参数为数据库第二个参数为SQL语句,第五格参数为错误信息。
if(sqlite3_exec(db, [createSQLUTF8String],NULL,NULL, &err)!=SQLITE_OK) {
NSLog(@"创建表失败!");
}else{
sqlite3_close(db);
}
sqlite3_close(db);
NSLog(@"创建表失败!");
}else{
sqlite3_close(db);
}
sqlite3_close(db);
}
(2)查询数据库,查询数据库先打开数据库同上
定义SQL查询语句NSString*qSQL = @"SELECT * FROM USER where name =?";
sqlite3_stmt*statement;//占位符绑定参数的宿主语句
调用sqlite3_prepare_v2()函数编译SQL语句,编译后会使查询效率提高(个人理解),第一个参数为数据库文件,第二个为SQL语句,第三个为-1,第四个为SQL语句中的占位符,此函数编译成功会返回SQLITE_OK.
if(sqlite3_prepare_v2(db, [qSQLUTF8String], -1, &statement,NULL) ==SQLITE_OK) {
//绑定参数开始
通过sqlite3_bind_text()函数给占位符绑定参数,第一个参数为绑定参数的对象,第二个表示是第几个占位符,第三个参数为占位符字符。
sqlite3_bind_text(statement,1, [nameUTF8String], -1,NULL);
调用sqlite3_step一次或多次来执行这个sql,这个过程用于执行有前面sqlite3_prepare创建的准备语句。这个语句执行到结果的第一行可用的位置。继续前进到结果的第二行的话,只需再次调用sqlite3_setp()。继续调用sqlite3_setp()知道这个语句完成,那些不返回结果的语句(如:INSERT,UPDATE,或DELETE),sqlite3_step()只执行一次就返回。
if(sqlite3_step(statement)==SQLITE_ROW) {
调用sqlite3_column_text(statement,0)函数返回第0列的值
char* name = (char*)sqlite3_column_text(statement,0);
NSString*nsname = [[NSStringalloc]initWithUTF8String:name];
intage = (int)sqlite3_column_int(statement,1);
char* sex = (char*)sqlite3_column_text(statement,2);
NSString*nssex = [[NSStringalloc]initWithUTF8String:sex];
Note*note = [[Notealloc]init];
note.name= nsname;
note.age= age;
NSString*nsname = [[NSStringalloc]initWithUTF8String:name];
intage = (int)sqlite3_column_int(statement,1);
char* sex = (char*)sqlite3_column_text(statement,2);
NSString*nssex = [[NSStringalloc]initWithUTF8String:sex];
Note*note = [[Notealloc]init];
note.name= nsname;
note.age= age;
note.sex = nssex;
调用sqlite3_finalize(statement)函数释放资源
sqlite3_finalize(statement);
关闭数据库
sqlite3_close(db);
returnnote;
}
}
sqlite3_finalize(statement);
returnnote;
}
}
sqlite3_finalize(statement);
sqlite3_close(db);
(3)插入数据
- (int)create:(Note*)model{
NSString*pathString = [NSHomeDirectory()stringByAppendingString:@"/Documents/Note.sqlite"];
NSLog(@"%@",pathString);
if (sqlite3_open([pathStringUTF8String], &db)!=SQLITE_OK) {
NSLog(@"打开数据库失败!");
sqlite3_close(db);
NSString*pathString = [NSHomeDirectory()stringByAppendingString:@"/Documents/Note.sqlite"];
NSLog(@"%@",pathString);
if (sqlite3_open([pathStringUTF8String], &db)!=SQLITE_OK) {
NSLog(@"打开数据库失败!");
sqlite3_close(db);
}else{
设置插入语句
NSString*sql = @"INSERT OR REPLACE INTO USER (name,age,sex) VALUES (?,?,?)";
sqlite3_stmt*statement;
if (sqlite3_prepare_v2(db, [sqlUTF8String], -1, &statement,NULL) ==SQLITE_OK) {
sqlite3_bind_text(statement,1, [model.nameUTF8String], -1,NULL);
sqlite3_bind_int64(statement,2, model.age);
sqlite3_stmt*statement;
if (sqlite3_prepare_v2(db, [sqlUTF8String], -1, &statement,NULL) ==SQLITE_OK) {
sqlite3_bind_text(statement,1, [model.nameUTF8String], -1,NULL);
sqlite3_bind_int64(statement,2, model.age);
sqlite3_bind_text(statement,3, [model.sexUTF8String], -1,NULL);
执行插入语句
if(sqlite3_step(statement)!=SQLITE_DONE){
NSLog(@"插入数据失败!");
}
}
sqlite3_finalize(statement);
sqlite3_close(db);
}
return 0;
NSLog(@"插入数据失败!");
}
}
sqlite3_finalize(statement);
sqlite3_close(db);
}
return 0;
}
(4)修改数据操作跟插入一样只是sql语句变了一下。
0 0
- 【SQLite】SQLite的简单使用
- sqlite 的查询使用
- sqlite的使用
- SQLite的使用场景
- SQLite的使用场景
- SQLite Delphi的使用
- SQLite的使用
- SQLite数据库的使用
- SQLite的简单使用
- android SQlite 的使用
- SQLite的使用场景
- android的sqlite使用
- SQLite的使用
- Sqlite的相关使用
- 关于SQLITE的使用
- SQLite的使用
- sqlite数据库的使用
- SQLite的使用
- LeetCode_12---Integer to Roman
- 带宽、速率(波特率、比特率)和码元宽度简述
- tomcat用80端口可以启动,但是浏览器不显示tomcat首页
- 第7章
- Maximum Subarray
- Sqlite的使用
- iOS开发UI基础—21使用嵌套模型完成的一个简单汽车图标展示程序
- 启动Android程序:unable to start service Intent {act = com.android.email.ACCOUNT_INTENT}
- string字符串常量池在内存中的位置
- PHP LDAP连接微软活动目录进行身份验证
- iOS开发UI基础—22实现UItableview控件数据刷新
- 2_向数据库中存入图片BLOB(单机)
- 小时钟(改)
- FMDB的使用