ios连接sql数据库

来源:互联网 发布:姗姗手账小铺 淘宝 编辑:程序博客网 时间:2024/05/21 00:45

   一个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;

        }

    }

    //UTF8StringOC类型的指针转换成C类型的指针

    sqlite3_open([targetPath UTF8String], &instanc);//打开数据库存入instanc数据库中

    NSLog(@"instance=%p",instanc);

    

   return instanc;

}

@end


在建立一个查询的类这里的例子是拼音查询的例子

#import <Foundation/Foundation.h>


@interface pinyin : NSObject

//创建映射列表

@property (assign,nonatomic)intid;

@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中数据了


原创粉丝点击