一个sql数据文件, 下载一个火狐浏览器。 中的一个sqlit manger 应用。
通过新建一个New database, 创建一个table
在到
倒入数据库, 生成一个.sqlite文件(之前有个让user选择存储的位置中)
把文件倒入到自己的项目中去,
建立sqllite的连接,添加 框架, 新建一个用来连接的类,
#import <Foundation/Foundation.h>
#import <sqlite3.h>
@interface connection : NSObject
+(sqlite3 *) createDB;
@end
@implementation connection
static sqlite3 *instanc=nil;
+(sqlite3 *) createDB{
if (instanc!=nil) {
return instanc;
}
//打开SQL文件路径
//先指出数据库文件的源路径
NSString *sourcePath=[[NSBundle mainBundle]pathForResource:@"ol_pinyins" ofType:@"sqlite"];
//再把数据库文件的目标路径指向document
NSString *docPath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES)objectAtIndex:0];
//目标路径,stringByAppendingPathComponent附加路径组件字符串,就是数据库名称。
NSString *targetPath=[docPath stringByAppendingPathComponent:@"ol_pinyins.sqlite"];
NSLog(@"targetPath=%@",targetPath);
//单例对象文件管理器创建
NSFileManager *fm=[NSFileManager defaultManager];
NSError *error=nil;
//判断目录下文件是否存在,当不存在的时候就进行拷贝,否则返回instanc
if (![fm fileExistsAtPath:targetPath]) {
[fm copyItemAtPath:sourcePath toPath:targetPath error:&error];
}else{
return instanc;
}
}
//UTF8String将OC类型的指针转换成C类型的指针
sqlite3_open([targetPath UTF8String], &instanc);//打开数据库存入instanc数据库中
NSLog(@"instance=%p",instanc);
return instanc;
}
@end
#import <Foundation/Foundation.h>
@interface pinyin : NSObject
//创建映射列表
@property (assign,nonatomic)int id;
@property (retain,nonatomic) NSString *pinyin;
+(NSMutableArray *) findbypinyin:(NSString *)pinYin;
@end
#import "pinyin.h"
#import "connection.h"
@implementation pinyin
@synthesize id,pinyin;
//根据拼音查询,查询id>26的字母
+(NSMutableArray *) findbypinyin:(NSString *)pinYin{
NSLog(@"%@",pinYin);
NSMutableArray * pinyinArray=nil;//返回查询结果
sqlite3 *sql3=[connection createDB];//获取数据连接
//声明sql语句对象
sqlite3_stmt *st;
NSString *sqlStr=[NSString stringWithFormat:@"select * from ol_pinyins where substr(pinyin,1,1)='%@'and id>26 order by pinyin",pinYin];// id前26个是单纯的a-z字母,我们不需要这几个字母
int p=sqlite3_prepare_v2(sql3,[sqlStr UTF8String], -1, &st,nil);//开辟sql3连接,st对象
if (p==SQLITE_OK) {//判断sql语法正确性
pinyinArray=[[[NSMutableArray alloc]init]autorelease];//如果正确则开辟空间
sqlite3_bind_text(st,1, [pinYin UTF8String], -1,nil);//绑定问号语句
while (sqlite3_step(st)==SQLITE_ROW) {//SQLITE_ROW宏定义表示是否查询到了记录,如果查询到了才可以操作这条记录
pinyin *detail=[[[pinyin alloc]init]autorelease];
detail.id=sqlite3_column_int(st,0);//获取的是sqlite里的数据 ,里面又一个id字段,一个拼音字段 获取st表格中的第0个字段
//把C语言类型的指针转换成OC类型的指针,并进行UIF8码转码
detail.pinyin=[NSString stringWithCString:(char *) sqlite3_column_text(st,1) encoding:NSUTF8StringEncoding];
[pinyinArray addObject:detail];
}
}
sqlite3_finalize(st);//关闭语句对象
return pinyinArray;
}
现在就可以类的方法进行读取出sqlite中数据了