当C++遇到IOS应用开发---SQLITE篇(二)

2014-11-24 09:18:33 · 作者: · 浏览: 3
Table& table):inTable(table){}
virtual ~CppSQLite3TableRow(void)
{};

} Row;


注意:关于Row的实现是老代码中所没有的,因为要考虑到尽量逼成ADO.NET的对象结构,所以这里加入了进来;
有了上面的对象支持,接下来就可以写一个封装类DBHelper.h来实现常用数据访问操作了,如下:


[cpp]
#ifndef DBHelper_h
#define DBHelper_h

#include "SQLiteHelper.h"

//#include
#include

using namespace std;
using namespace SQLiteWrapper;

namespace SQLiteWrapper {
class DBHelper
{


private:
DBHelper()
{}
virtual ~DBHelper(void)
{}

public:
static DB db;

static DB loadDb()
{
DB database;
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSArray *arr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory/*NSCachesDirectory*/, NSUserDomainMask, YES);
NSString *path = [arr objectAtIndex:0];
path = [path stringByAppendingPathComponent:@"MySqlLitePath"];

// create directory for db if it not exists
NSFileManager *fileManager = [[NSFileManager alloc] init];
BOOL isDirectory = NO;
BOOL exists = [fileManager fileExistsAtPath:path isDirectory:&isDirectory];
if (!exists) {
[fileManager createDirectoryAtPath:path withIntermediateDirectories:NO attributes:nil error:nil];
if (![fileManager fileExistsAtPath:path]) {
[NSException raise:@"FailedToCreateDirectory" format:@"Failed to create a directory for the db at '%@'",path];
}
}
[fileManager release];
// create db object
NSString *dbfilePath = [path stringByAppendingPathComponent:@"Blogs"];
std::string dbpathstr =[dbfilePath UTF8String];


const char *dbpath = dbpathstr.c_str();//"/Users/MySqlLitePath/Blogs";
database.open(dbpath);
[pool release];
}
return database;
}


static bool tableExists(const char* szTable)
{
return db.tableExists(szTable);
}


static int execNoQuery(const char* szSQL)
{
return db.execDML(szSQL);
}

static int execNoQuery(const NSString* szSQL)
{
return db.execDML([szSQL UTF8String].c_str());
}

static Query execQuery(const char* szSQL)
{
return db.execQuery(szSQL);
}

static Query execQuery(const NSString* szSQL)
{
return db.execQuery([szSQL UTF8String].c_str());
}

static Query execScalar(const char* szSQL)
{
return db.execQuery(szSQL);
}

static int execScalar(const NSString* szSQL)
{
return db.execScalar([szSQL UTF8String].c_str());
}

static Table getTable(const char* szSQL)
{
return db.getTable(szSQL);
}

static Table getTable(const NSString* szSQL)
{
return db.getTable([szSQL UTF8String].c_str());
}

static Statement compileStatement(const char* szSQL)
{
return db.compileStatement(szSQL);
}

static Statement compileStatement(const NSString* szSQL)
{
return db.compileStatement([szSQL UTF8String].c_str());
}

static sqlite_int64 lastRowId()
{
return db.lastRowId();
}


sta