24点小游戏iOS开发(二)--fmdb数据库相关

界面的设计就是简单的在storyboard中拖入控件然后在头文件.h中声明功能然后连接即可。

为了存下用户的数据,我参考了一个扫雷小游戏的源码,选择利用fmdb来存储。

一、先安装cocoapods,可参考这个http://www.jianshu.com/p/9e4e36ba8574。到导入第三方库的时候导入fmdb即可。

并在你的项目中的targets中build phases 中的link binary with libraries中添入libsqlite3.dylib库。

以下我是先参考了一些博客的代码,(为了验证找生成的数据库文件找了很久...在这个/Users/你的用户名/Library(需要先设置显示隐藏文件)/Developer/CoreSimulator/Devices/路径下然后查找文件即可,用火狐的SQLite manage看了看生成的数据),成功在控制台看到自己的用户信息之后,经过学姐的提示,用数组来存储用户信息,我选择的是简单的用lable text来显示用户信息,用降序排列,并设置了排行榜按钮,设计了按下之后再显示label的内容的功能(利用alpha属性)。

platform :ios,'7.0'
target '24' do
pod 'FMDB'
end
.h中:
#import "FMDB.h"
#define DBNAME  @"personinfo.sqlite"
#define NAME    @"name"
#define SCORE   @"score"
#define TIME    @"time"
#define TABLENAME   @"PERSONINFO"
.m中:
-(IBAction)buttonsave{
    NSString *sqlCreateTable = @"CREATE TABLE IF NOT EXISTS PERSONINFO (ID INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, score INTEGER, time INTEGER)";
    
    [self execSql:sqlCreateTable];
    NSString *sql1 = [NSString stringWithFormat:
                      @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%d', '%d')",
                      TABLENAME, NAME, SCORE, TIME,_NameLabel.text,score, lable18];
    
    [self execSql:sql1];//插入新输入的用户信息
    NSString *sqlQuery = @"SELECT * FROM PERSONINFO ORDER BY score DESC";
    sqlite3_stmt * statement;
    NSMutableArray *dataArr = [[NSMutableArray alloc]init];
    if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) {
        while (sqlite3_step(statement) == SQLITE_ROW) {
            char *name = (char*)sqlite3_column_text(statement, 1);
            NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name];
            int scoree = sqlite3_column_int(statement, 2);
            int time = sqlite3_column_int(statement, 3);
            NSString *stuData = [NSString stringWithFormat:@"name:%@  score:%d  time:%d",nsNameStr,scoree, time];
            [dataArr addObject:stuData];
        }
    }
    sqlite3_close(db);
    lableone.text = [dataArr objectAtIndex: 0];
    labletwo.text = [dataArr objectAtIndex: 1];
    lablethree.text = [dataArr objectAtIndex: 2];
    
}//保存插入并重新排序


-(void)execSql:(NSString *)sql
{
    char *err;
    if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {
        sqlite3_close(db);
        NSLog(@"数据库操作数据失败!");
    }
}
- (void)database1{
    //数据库
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documents = [paths objectAtIndex:0];
    NSString *database_path = [documents stringByAppendingPathComponent:DBNAME];
    if (sqlite3_open([database_path UTF8String], &db) != SQLITE_OK) {
        sqlite3_close(db);
        NSLog(@"数据库打开失败");
    }
    NSString *sqlCreateTable = @"CREATE TABLE IF NOT EXISTS PERSONINFO (ID INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, score INTEGER, time INTEGER)";
    NSLog(@"创表");
    [self execSql:sqlCreateTable];//插入初始数据
    NSString *sql1 = [NSString stringWithFormat:
                      @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",
                      TABLENAME, NAME, SCORE, TIME, @"张三", @"1", @"20"];
    NSString *sql2 = [NSString stringWithFormat:
                      @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",
                      TABLENAME, NAME, SCORE, TIME, @"老六", @"2", @"30"];
    NSString *sql3 = [NSString stringWithFormat:
                      @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",
                      TABLENAME, NAME, SCORE, TIME, @"老4", @"4", @"37"];
    NSString *sql4 = [NSString stringWithFormat:
                      @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",
                      TABLENAME, NAME, SCORE, TIME, @"老5", @"5", @"39"];

    [self execSql:sql1];
    [self execSql:sql2];
    [self execSql:sql3];
    [self execSql:sql4];
    NSString *sqlQuery = @"SELECT * FROM PERSONINFO ORDER BY score DESC";
    sqlite3_stmt * statement;
    NSMutableArray *dataArr = [[NSMutableArray alloc]init];
    if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) {
        while (sqlite3_step(statement) == SQLITE_ROW) {
            char *name = (char*)sqlite3_column_text(statement, 1);
            NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name];
            int scoree = sqlite3_column_int(statement, 2);
            int time = sqlite3_column_int(statement, 3);
            NSString *stuData = [NSString stringWithFormat:@"name:%@  score:%d  time:%d",nsNameStr,scoree, time];
            [dataArr addObject:stuData];
        }
    }
    sqlite3_close(db);
    lableone.text = [dataArr objectAtIndex: 0];
    labletwo.text = [dataArr objectAtIndex: 1];
    lablethree.text = [dataArr objectAtIndex: 2];
}
-(IBAction)buttonqc{
    //清除数据库里所有数据
    NSString *delete = @"delete from PERSONINFO";
    [self execSql:delete];
}

    lable1.alpha=0.0;
    lable2.alpha=0.0;
    lable3.alpha=0.0;
    lable4.alpha=0.0;//隐藏



猜你喜欢

转载自blog.csdn.net/mukami0621/article/details/78489387
今日推荐