本节的目标:一个数据查询功能.
{Fb&|\X]iS,2IEUYlfk`b'i]l9&OynI(orkAxyyxj(&aym3lShWB本文来自:V电G玩S天K空Y步骤:
{Fb&|\X]iS,2IEUYlfk`b'i]l9&OynI(orkAxyyxj(&aym3lShWB本文来自:V电G玩S天K空Y首先新建一个数据库,这里用一个小程序sqlitecc.exe来建数据库,命名为infodata.db,填如一些内容,作为示意这里填了些三国武将,考虑到演示联合查询,这里建了2个表.首先可以在这里实验sql语句对不对,例如我要查询3号记录的五围数值.
{Fb&|\X]iS,2IEUYlfk`b'i]l9&OynI(orkAxyyxj(&aym3lShWB本文来自:V电G玩S天K空Yselect heroinfo.name,ti,wu,zhi,mei,age,herotype.name from heroinfo,herotype where heroinfo.id=3 and heroinfo.type=herotype.id;
{Fb&|\X]iS,2IEUYlfk`b'i]l9&OynI(orkAxyyxj(&aym3lShWB本文来自:V电G玩S天K空Y测试好了写程序吧.
{Fb&|\X]iS,2IEUYlfk`b'i]l9&OynI(orkAxyyxj(&aym3lShWB本文来自:V电G玩S天K空Y
接着建立一个程序,我偷个懒 这里采用lesson2的部分,我原封不动拷贝了一份,然后改里边的内容. 主要就是: DST`o本文来自:V电G玩S天K空Y
#include "CppSQLite3.h" //头文件DST`o本文来自:V电G玩S天K空Y
#include <iostream>DST`o本文来自:V电G玩S天K空Y
#include <string.h> #ifdef WIN32 //库连接DST`o本文来自:V电G玩S天K空Y
#pragma comment(lib,"libsqlite.lib")DST`o本文来自:V电G玩S天K空Y
#pragma comment(lib,"libcppsql.lib")DST`o本文来自:V电G玩S天K空Y
#pragma comment(lib,"SDL_ttf.lib")DST`o本文来自:V电G玩S天K空Y
#endif CppSQLite3DB db; //增加一个CppSQLite3DB变量
可能大家还记得lesson2是从一个数组里读的内容,现在改为从数据库里读. 这个函数就用到了上面的测试语句.用来读取武将五围.q.fieldValue(i)返回的是查询结果的第几列.q.nextRow();是到结果的下一行.
{Fb&|\X]iS,2IEUYlfk`b'i]l9&OynI(orkAxyyxj(&aym3lShWB本文来自:V电G玩S天K空Y char* CreateInfoByid(int id)DST`o本文来自:V电G玩S天K空Y
{DST`o本文来自:V电G玩S天K空Y
static char buffer[1024]={0};DST`o本文来自:V电G玩S天K空Y
static char querybuf[1024]={0};DST`o本文来自:V电G玩S天K空Y
memset(querybuf,0,1024);DST`o本文来自:V电G玩S天K空Y
tryDST`o本文来自:V电G玩S天K空Y
{ db.open("infodata.db");DST`o本文来自:V电G玩S天K空Y
sprintf(querybuf,"select heroinfo.name,ti,wu,zhi,mei,age,herotype.name from "DST`o本文来自:V电G玩S天K空Y
" heroinfo,herotype where heroinfo.id=%d and heroinfo.type=herotype.id;",id);DST`o本文来自:V电G玩S天K空Y
CppSQLite3Query q = db.execQuery(querybuf);DST`o本文来自:V电G玩S天K空Y
if (!q.eof())DST`o本文来自:V电G玩S天K空Y
{DST`o本文来自:V电G玩S天K空Y
sprintf(buffer,"%s 体力%s 武力%s 智力%s 魅力%s 年龄%s 类型 %s", q.fieldValue (0),q.fieldValue(1),q.fieldValue(2),q.fieldValue(3),DST`o本文来自:V电G玩S天K空Y
q.fieldValue(4),q.fieldValue(5),q.fieldValue(6));DST`o本文来自:V电G玩S天K空Y
}DST`o本文来自:V电G玩S天K空Y
db.close();DST`o本文来自:V电G玩S天K空Y
}catch (CppSQLite3Exception& e){DST`o本文来自:V电G玩S天K空Y
DST`o本文来自:V电G玩S天K空Y
printf("%s\n",e.errorMessage());DST`o本文来自:V电G玩S天K空Y
}DST`o本文来自:V电G玩S天K空Y
return buffer;DST`o本文来自:V电G玩S天K空Y
} //这个是读记录多少的. int GetInfoCount()DST`o本文来自:V电G玩S天K空Y
{DST`o本文来自:V电G玩S天K空Y
int count = 0;DST`o本文来自:V电G玩S天K空Y
tryDST`o本文来自:V电G玩S天K空Y
{ db.open("infodata.db");DST`o本文来自:V电G玩S天K空Y
CppSQLite3Query q = db.execQuery("select count(*) from heroinfo;");DST`o本文来自:V电G玩S天K空Y
if (!q.eof())DST`o本文来自:V电G玩S天K空Y
{DST`o本文来自:V电G玩S天K空Y
count = atoi(q.fieldValue(0));DST`o本文来自:V电G玩S天K空Y
DST`o本文来自:V电G玩S天K空Y
}DST`o本文来自:V电G玩S天K空Y
db.close();DST`o本文来自:V电G玩S天K空Y
}catch (CppSQLite3Exception& e){DST`o本文来自:V电G玩S天K空Y
DST`o本文来自:V电G玩S天K空Y
printf("%s\n",e.errorMessage());DST`o本文来自:V电G玩S天K空Y
}DST`o本文来自:V电G玩S天K空Y
return count;DST`o本文来自:V电G玩S天K空Y
}DST`o本文来自:V电G玩S天K空Y
以上就是查询,熟悉sql的人基本问题不大. 下面是显示,按d键(psp上是圆圈键)到一条记录 DST`o本文来自:V电G玩S天K空Y
编译:DST`o本文来自:V电G玩S天K空Y
1 psp版编译 将他拷贝到demo下make SCEkxpoit即可,注意把资源文件一起拷入到__xx_目录 (psp版把char.png,char2.png,gamebg.png,msgbox.png,simkai.ttf,infodata.db 拷贝到__SCE__lesson4 不然会运行出错)
2 windows版编译,这里需要重新替换一下libcppsql.lib,libsqlite.lib,因为我当初打包的时候没有将这2个库编译成为多线程版本,这里需要多线程版的.替换之后打开工程编译即可,不然会有linkerrorxxx ptype,替换部分可以下载,也可以自己编译.本节最后有自行编译这2个库的方法. (运行时请将lesson2的资源char.png,char2.png,gamebg.png,msgbox.png,simkai.ttf拷贝过来) 本课下载 http://code.google.com/p/topoc/downloads/list
{Fb&|\X]iS,2IEUYlfk`b'i]l9&OynI(orkAxyyxj(&aym3lShWB本文来自:V电G玩S天K空Y附录:编译多线程的libcppsql.lib,libsqlite.lib 打开src下的工程libnge_win\src\sqlite-3.3.17\win32\libsqlite.dsw 编译时选择
{Fb&|\X]iS,2IEUYlfk`b'i]l9&OynI(orkAxyyxj(&aym3lShWB本文来自:V电G玩S天K空Y
同理libcppsql也是这样,编译完成后覆盖原来旧的即可(libnge_win\libsqlite\libs)下的那2个DST`o本文来自:V电G玩S天K空Y
-----------------------------------------DST`o本文来自:V电G玩S天K空Y
VS2005下编译libsqlite,libcppsql:DST`o本文来自:V电G玩S天K空Y
1 打开工程,并移除shell.c(shell.c没有用到,但是vs2005的函数(access和isatty)变了,以后链接会有问题,所以干脆去掉).DST`o本文来自:V电G玩S天K空Y
2 直接编译,然后拷贝lib到libnge_win\libsqlite\libs 另 VS2005编译本课请看教程00最后,区别是附加依赖中再加入 libsqlite.lib,libcppsql.lib即可


