使用SQLite数据库存储数据

SQLite是一款轻型的数据库,一般在几KB到几百KB,占用资源很低,很适合在移动设备上使用。

你可以在App Store中找到是收费下载的,也可以在网上直接搜索SQLite Mac就能找到免费的版本下载。

在文章结尾提供有SQLite Mac下载连接,和这篇文章的码源下载

下载并安装之后打开如图所示:

我们选中Tables然后点击左下角的加号就会弹出添加Table的界面,然后输入Table名称table1,并点击右侧的加号添加列,如图所示:


接着点击Create创建就行了,然后我们就能看到刚刚建的table1了。左键双击table1会出现添加列的窗口,右键单击就会出现Query的按钮点击就会出现添加行的窗口,在添加行的窗口右下角点击加号就可以添加行的内容了,记得添加过之后要点击Save。然后关闭窗体你就能看到我们建好的表格数据了。

然后我们需要建成如下图所示的两个Table:



好了数据库的使用就到这里了,下面我们需要把它添加到项目中并对其进行读写操作。

首先我们建一个用于和数据库交互的类:SqliteHelper,还有两个跟数据库中表格相对应的类:Datagamestage、Dataresearch。

下面我们在SqliteHelper的头文件中声明四个类方法:

//取单项

+(Datagamestage *)getItem:(int)gameid FileName:(NSString *)fileName;


//修改单项

+(BOOL)updateItem:(Datagamestage *)item FileName:(NSString *)fileName;


//取列表

+(NSMutableArray *)getList:(int)gameid FileName:(NSString *)fileName;


//修改列表

+(BOOL)updateList:(NSMutableArray*)list FileName:(NSString *)fileName;

这里我们主要对数据库最常用的读取和修改操作进行讲解,这四个方法是对单行和多行的的数据进行的操作,我们来讲一下取单项的方法:


   首先我们需要实例化一个与数据库表格相对应的类:

Datagamestage *item = [[[Datagamestagealloc] init] autorelease];


然后进行数据库操作的第一步获取资源路径,在这里我使用的是相对路径,因为我们做的项目肯定要在不同的地方使用,只有使用相对路径才能每次都获取到正确的文件路径:

// 1.获取资源路径

   NSString *resourcePath = [[NSBundlemainBundle] resourcePath];

   NSString *path = [resourcePath stringByAppendingPathComponent:DB_NAME];

resourcePath是我们的项目资源打包路径,我们需要把制作好的数据库文件放到Resources文件夹中去并引用到项目中,并且需要把数据库名称在文件顶部进行宏定义:

#define DB_NAME @"database.sqlite"

这样当我们换数据库的时候只需要修改一下宏定义一处就行了。

接着我们需要判断一下文件路径是否正确:

 NSFileHandle *fileManager = [NSFileHandlefileHandleForReadingAtPath:path];

 if (fileManager)

{

// 接着要在这里添加

}

如果正确,我们开始数据库操作第二步打开数据库,这里我们需要在文件顶部引入Sqlite3.h:#import <sqlite3.h>:

// 2.打开sqlite3的数据库文件

       sqlite3 *database;

        // 判断数据库是否打开

       if(sqlite3_open([pathUTF8String], &database) != SQLITE_OK)

        {

           sqlite3_close(database);

           NSLog(@"打开数据库文件失败");

        }

       else

        {

         // 接着要在这里添加

        }

如果打开成功我们就要开始第三步准备sql语句:

// 3.准备sql语句

sqlite3_stmt *statement;

NSMutableString *sqlStr = [NSMutableStringstring];

[sqlStr appendFormat:@"select coin,mana_stone,stage,cur_nu,final,numberone,cur_fire,cur_ice,cur_light,gameID from %@", fileName];

[sqlStr appendFormat:@" where gameID = %i", gameid];

这里简单说一下有关数据库的语法操作,最主要的数据库操作就是增、删、改、查

,这里我们使用的是select(查),也可以说是读取,语法主干是select   from   where 。from前面是列名(如果是*则表示查询所有的列),后面是表名,where后面跟的是行id(主要是限定范围,如果没有则表示全部)。

下面开始数据库操作第四步执行sql语句:

// 4.执行sql语句

           if(sqlite3_prepare_v2(database, [sqlStrUTF8String], -1, &statement,nil) != SQLITE_OK)

            {

                NSLog(@"Error to getItem from table %@", fileName);

            }

           else

            {

               // 接着要在这里添加

            }

如果执行成功那么我们就需要把查询到的数据赋值给item(接收数据库数据):

                while(sqlite3_step(statement) ==SQLITE_ROW)

                {

                    //item.gameid = (int)sqlite3_column_int(statement, 1);

                    item.data_coin = (int)sqlite3_column_int(statement,0);

                    item.data_mana_stone = (int)sqlite3_column_int(statement,1);

                    item.data_stage = (int)sqlite3_column_int(statement,2);

                   char *data_name = (char*)sqlite3_column_text(statement, 3);

                   if (data_name != nil)

                        item.cur_nu_name = [NSStringstringWithUTF8String:data_name];

                   else

                        item.cur_nu_name =@"";

                    item.data_final_lock = (int)sqlite3_column_int(statement,4);

                    item.numberone = (int)sqlite3_column_int(statement,5);

                   char *cur_fire = (char*)sqlite3_column_text(statement, 6);

                   if (cur_fire != nil)

                        item.cur_fire = [NSStringstringWithUTF8String:cur_fire];

                   else

                        item.cur_fire =@"";

                   char *cur_ice = (char*)sqlite3_column_text(statement, 7);

                   if (cur_ice != nil)

                        item.cur_ice = [NSStringstringWithUTF8String:cur_ice];

                   else

                        item.cur_ice =@"";

                   char *cur_light = (char*)sqlite3_column_text(statement, 8);

                   if (cur_light != nil)

                        item.cur_light = [NSStringstringWithUTF8String:cur_light];

                   else

                        item.cur_light =@"";

                    item.gameid = (int)sqlite3_column_int(statement,9);

                }

当我们的数据读取操作结束之后,还需要释放sql资源,和关闭数据库:

           // 5.释放sql资源

           sqlite3_finalize(statement);

            

            // 6.关闭iPhone上的sqlite3的数据库

           sqlite3_close(database);

还有在最后要返回item,这样我们的数据库读取操作就结束了。

SQLite Mac下载                


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值