【教程18】使用sqlite数据库



掌叔
2009-06-05 07:59:41

摘自:[url]www.iacger.com[/url]
作者:newcreat

本例子是使用sqlite数据库的例子,sqlite是一个著名的小型数组库,再各个领域广泛使用,是仅次于mysql的sql数据库。 由于本节是讲述PSP上操作,对sql不在做介绍,请查阅SQL语言介绍 本例从sql数据库中查询结果然后使用。 由于直接操作sqlite比较困难,所以有个操作类cppsqlite,大大简化操作 char* CreateInfoByid(int id) //通过id查到字符串 int GetInfoCount() //得到记录条数 本例对应nge下的demo5,细心的人会发现就是用demo1改的。 CppSQLite3.h和CppSQLite3.cpp再demo5下有,加入到自己的工程即可 读取的是database/infodata.db。

[attach]1327[/attach]

[attach]1328[/attach]

[code=c]
#include "libnge2.h"
#include "CppSQLite3.h"
/**
* nge_test:测试nge2的按键输入字体
* 所需资源文件:拷贝到相应目录下
* fonts/GBK14,fonts/ASC14,fonts/simfang.ttf,images/demo1_bg.png,images/demo1_box.jpg
* images/demo1_icon.jpg
*/


int game_quit = 0;
image_p pimage_text,pimage_bg,pimage_box;
image_p pimage_icon[2];

int mask8888 = MAKE_RGBA_8888(255,255,255,255);
int mask4444 = MAKE_RGBA_4444(255,255,255,255);
//半透明的box
int maskbox = MAKE_RGBA_8888(255,255,255,128);
CppSQLite3DB db;

char* CreateInfoByid(int id)
{
        static char buffer[1024]={0};
        static char querybuf[1024]={0};
        memset(querybuf,0,1024);
        try
    {        db.open("database/infodata.db");
                sprintf(querybuf,"select heroinfo.name,ti,wu,zhi,mei,age,herotype.name from "
                        " heroinfo,herotype where heroinfo.id=%d and heroinfo.type=herotype.id;",id);
                CppSQLite3Query q = db.execQuery(querybuf);
               
                if (!q.eof())
        {
            sprintf(buffer,"%s  体力%s 武力%s 智力%s 魅力%s 年龄%s 类型 %s", q.fieldValue(0),q.fieldValue(1),q.fieldValue(2),q.fieldValue(3),
                                q.fieldValue(4),q.fieldValue(5),q.fieldValue(6));
        }
                db.close();
        }catch (CppSQLite3Exception& e){
   
        printf("%s
",e.errorMessage());
    }
        
        return buffer;
}

int GetInfoCount()
{
        int count = 0;
        try
    {        db.open("database/infodata.db");
                CppSQLite3Query q = db.execQuery("select count(*) from heroinfo;");
                if (!q.eof())
        {
             count = atoi(q.fieldValue(0));
               
        }
                db.close();
        }catch (CppSQLite3Exception& e){
   
        printf("%s
",e.errorMessage());
    }
        return count;
}


void btn_down(int keycode)
{
        switch(keycode)
    {
        case PSP_BUTTON_UP:
                break;
        case PSP_BUTTON_DOWN:
                break;
        case PSP_BUTTON_LEFT:
                break;
        case PSP_BUTTON_RIGHT:
                break;
        case PSP_BUTTON_TRIANGLE:
                break;
        case PSP_BUTTON_CIRCLE:
                break;
        case PSP_BUTTON_CROSS:
                break;
    case PSP_BUTTON_SQUARE:
                break;
        case PSP_BUTTON_SELECT:
                game_quit = 1;
                break;
        case PSP_BUTTON_START:
                game_quit = 1;
                break;
    }
}

void btn_up(int keycode)
{
        switch(keycode)
    {
        case PSP_BUTTON_UP:
                break;
        case PSP_BUTTON_DOWN:
                break;
        case PSP_BUTTON_LEFT:
                break;
        case PSP_BUTTON_RIGHT:
                break;
        case PSP_BUTTON_TRIANGLE:
                break;
        case PSP_BUTTON_CIRCLE:
                break;
        case PSP_BUTTON_CROSS:
                break;
    case PSP_BUTTON_SQUARE:
                break;
        case PSP_BUTTON_SELECT:
                game_quit = 1;
                break;
        case PSP_BUTTON_START:
                game_quit = 1;
                break;
    }
}

void DrawScene()
{

        BeginScene(1);
        ImageToScreen(pimage_bg,0,0);
        
        RenderQuad(pimage_box,0,0,0,0,70,185,1,1,0,maskbox);
        RenderQuad(pimage_box,0,0,0,0,70,5,1,1,0,maskbox);
        DrawImage(pimage_icon[0],0,0,0,0,-20,-37,128,128);
        DrawImage(pimage_icon[1],0,0,0,0,-20,143,128,128);
        ImageToScreen(pimage_text,0,0);
        
        EndScene();
}



extern "C"
int main(int argc, char* argv[])
{
        PFont pf[2] ;

        int i;
        
        NGE_Init(INIT_VIDEO);
        InitInput(btn_down,btn_up,1);
        int maxid = GetInfoCount();
        //创建一个显示image,字就显示在这个上面注意DISPLAY_PIXEL_FORMAT必须与创建字体的DISPLAY_PIXEL_FORMAT一致
        pimage_text = image_create(512,512,DISPLAY_PIXEL_FORMAT_4444);
        //创建字体
        pf[0] = create_font_hzk("fonts/GBK14","fonts/ASC14",14,DISPLAY_PIXEL_FORMAT_4444);
        pf[1] = create_font_freetype("fonts/simfang.ttf",13,DISPLAY_PIXEL_FORMAT_4444);
        char str[3][128]={"【小萝莉】","众芳摇落独暄妍,占尽风情向小园。","疏影横斜水清浅,暗香浮动月黄昏。"};
        //显示GBK Font
        font_setcolor(pf[0],MAKE_RGBA_4444(128,0,0,255));
        font_drawtext(pf[0],str[0],strlen(str[0]),pimage_text,100,195,FONT_SHOW_NORMAL);
        for(i = 0;i                font_drawtext(pf[0],CreateInfoByid(i),strlen(CreateInfoByid(i)),pimage_text,120,200+i*20,FONT_SHOW_SHADOW);
                font_setcolor(pf[0],MAKE_RGBA_4444(255,0,0,255));
        }
        
        //显示freetype
        font_setcolor(pf[1],MAKE_RGBA_4444(128,0,0,255));
        font_drawtext(pf[1],str[0],strlen(str[0]),pimage_text,100,30,FONT_SHOW_NORMAL);
        //for(i =1;i<3;i++){
        //        font_drawtext(pf[1],str[i],strlen(str[i]),pimage_text,120,35+i*20,FONT_SHOW_NORMAL);
        //        font_setcolor(pf[1],MAKE_RGBA_4444(255,0,0,255));
        //}
        pimage_bg = image_load("images/demo1_bg.jpg",DISPLAY_PIXEL_FORMAT_8888,1);
        if(pimage_bg == NULL)
                printf("can not open file
");
        pimage_box = image_load("images/demo1_box.jpg",DISPLAY_PIXEL_FORMAT_8888,1);
        if(pimage_box == NULL)
                printf("can not open file
");
        pimage_icon[0] = image_load_colorkey("images/demo1_icon0.bmp",DISPLAY_PIXEL_FORMAT_8888,MAKE_RGB(0,0,0),1);
        pimage_icon[1] = image_load_colorkey("images/demo1_icon1.png",DISPLAY_PIXEL_FORMAT_8888,MAKE_RGB(0,0,0),1);
        while ( !game_quit )
        {
                ShowFps();
                InputProc();
                DrawScene();
        }
        font_destory(pf[0]);
        font_destory(pf[1]);
        image_free(pimage_bg);
        image_free(pimage_text);
        image_free(pimage_box);
        NGE_Quit();
        return 0;
}
[/code]