|
|
// mySqlite.cpp: implementation of the mySqlite class.
|
|
|
//
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
#include "mySqlite.h"
|
|
|
#include <stdlib.h>
|
|
|
|
|
|
#include <string.h>
|
|
|
#include <windows.h>
|
|
|
#include "WriteLog.h"
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
// Construction/Destruction
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
mySqlite::mySqlite()
|
|
|
{
|
|
|
m_dbptr = NULL;
|
|
|
m_RecordCount = 0;
|
|
|
|
|
|
m_SqliteFileName = "";
|
|
|
m_SqlVersion = "";
|
|
|
memset(m_PriKey, 0, sizeof(m_PriKey));
|
|
|
}
|
|
|
|
|
|
mySqlite::~mySqlite()
|
|
|
{
|
|
|
}
|
|
|
|
|
|
int mySqlite::toWString(wstring &deststr,const string& sourcestr, unsigned int code)
|
|
|
{
|
|
|
std::wstring wstr;
|
|
|
int len;
|
|
|
int iret;
|
|
|
|
|
|
len = MultiByteToWideChar(code, 0, sourcestr.c_str(), -1, NULL, 0);
|
|
|
if (0 == len)
|
|
|
{
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
wstr.resize(static_cast<size_t>(len + 1));
|
|
|
iret = MultiByteToWideChar(code, 0, sourcestr.c_str(), -1, const_cast<wchar_t*>(wstr.c_str()), len);
|
|
|
if (0 == len)
|
|
|
{
|
|
|
return -2;
|
|
|
}
|
|
|
|
|
|
deststr = wstr;
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
|
|
|
int mySqlite::toYString(string& deststr,const std::wstring& sourcestr, unsigned int code )
|
|
|
{
|
|
|
string ystr;
|
|
|
int len;
|
|
|
int iret;
|
|
|
|
|
|
len = WideCharToMultiByte(code, 0, sourcestr.c_str(), -1, NULL, 0, NULL, NULL);
|
|
|
if (0 == len)
|
|
|
{
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
ystr.resize(static_cast<size_t>(len - 1));
|
|
|
len = WideCharToMultiByte(code, 0, sourcestr.c_str(), -1, const_cast<char*>(ystr.c_str()), len, NULL, NULL);
|
|
|
if (0 == len)
|
|
|
{
|
|
|
return -2;
|
|
|
}
|
|
|
|
|
|
deststr = ystr;
|
|
|
}
|
|
|
|
|
|
|
|
|
int mySqlite::GbkToUtf8(string & utf8str, const string& gbkstr)
|
|
|
{
|
|
|
int iret;
|
|
|
|
|
|
wstring wstr;
|
|
|
string ystr;
|
|
|
|
|
|
iret = gbkstr.length();
|
|
|
if(iret <= 0)
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
iret = toWString(wstr, gbkstr, CP_ACP);
|
|
|
if (iret < 0)
|
|
|
{
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
iret = toYString(ystr, wstr);
|
|
|
if (iret < 0)
|
|
|
{
|
|
|
return -2;
|
|
|
}
|
|
|
|
|
|
utf8str = ystr;
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
|
|
|
int mySqlite::Utf8ToGbk(string & gbkstr, const string& utf8str)
|
|
|
{
|
|
|
int iret;
|
|
|
|
|
|
wstring wstr;
|
|
|
string ystr;
|
|
|
|
|
|
iret = utf8str.length();
|
|
|
if (iret <= 0)
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
iret = toWString(wstr, utf8str);
|
|
|
if (iret < 0)
|
|
|
{
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
iret = toYString(ystr, wstr, CP_ACP);
|
|
|
if (iret < 0)
|
|
|
{
|
|
|
return -2;
|
|
|
}
|
|
|
|
|
|
gbkstr = ystr;
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
|
|
|
bool mySqlite::Open(const char * pName, const char * pKey)
|
|
|
{
|
|
|
int iRet;
|
|
|
|
|
|
iRet = GetSqlTmpName(pName);
|
|
|
if (iRet < 0)
|
|
|
{
|
|
|
// WriteLog("<22>ļ<EFBFBD> %s <20><>ȡʱ<C8A1><CAB1>ʧ<EFBFBD><CAA7>, <20><><EFBFBD><EFBFBD>ֵ %d",pName, iRet);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
iRet = SetPriKey(pKey);
|
|
|
if (iRet < 0)
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
Close();
|
|
|
|
|
|
iRet = GetWriteTime(pName);
|
|
|
if (iRet < 0)
|
|
|
{
|
|
|
WriteLog("<EFBFBD>ļ<EFBFBD> %s <20><>ȡʱ<C8A1><CAB1>ʧ<EFBFBD><CAA7>, <20><><EFBFBD><EFBFBD>ֵ %d",pName, iRet);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
|
|
|
iRet = sqlite3_open(pName, &m_dbptr);
|
|
|
if (iRet != SQLITE_OK)
|
|
|
{
|
|
|
sqlite3_close(m_dbptr);
|
|
|
m_dbptr = NULL;
|
|
|
WriteLog("<EFBFBD>ļ<EFBFBD> %s sqlite3_openʧ<6E><CAA7>",pName);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
WriteLog("<EFBFBD>ļ<EFBFBD> %s <20>ɹ<F2BFAAB3>",pName);
|
|
|
m_SqliteFileName = pName;
|
|
|
|
|
|
iRet = GetTableName();
|
|
|
if(iRet < 0)
|
|
|
{
|
|
|
Close();
|
|
|
WriteLog("<EFBFBD>ļ<EFBFBD> %s <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>,<2C><><EFBFBD><EFBFBD>ֵ %d",pName,iRet);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
iRet = GetCountAndVerSion();
|
|
|
if(iRet < 0)
|
|
|
{
|
|
|
Close();
|
|
|
WriteLog("<EFBFBD>ļ<EFBFBD> %s <20><>ȡ<EFBFBD><C8A1>¼<EFBFBD>Ͱ汾ʧ<E6B1BE><CAA7>,<2C><><EFBFBD><EFBFBD>ֵ %d",pName,iRet);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
void mySqlite::Close()
|
|
|
{
|
|
|
if (m_dbptr)
|
|
|
{
|
|
|
sqlite3_close(m_dbptr);
|
|
|
m_dbptr = NULL;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
int mySqlite::SetPriKey(const char * pKey)
|
|
|
{
|
|
|
int iRet;
|
|
|
iRet = strlen(pKey);
|
|
|
if (iRet >= MAX_PRIKEYNAME_LEN)
|
|
|
{
|
|
|
WriteLog("key %s <20><><EFBFBD><EFBFBD>̫<EFBFBD><CCAB>",pKey);
|
|
|
return -1;
|
|
|
}
|
|
|
strcpy(m_PriKey, pKey);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
bool mySqlite::IsOpened()
|
|
|
{
|
|
|
if (m_dbptr)
|
|
|
{
|
|
|
return true;
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
string mySqlite::GetDBFFileName()
|
|
|
{
|
|
|
return m_SqliteFileName;
|
|
|
}
|
|
|
|
|
|
int mySqlite::GetSqlTmpName(const char * pName)
|
|
|
{
|
|
|
char buf[320];
|
|
|
// int iret;
|
|
|
int i;
|
|
|
int ilen;
|
|
|
char * ptr;
|
|
|
|
|
|
ilen = strlen(pName);
|
|
|
if(ilen >300)
|
|
|
{
|
|
|
WriteLog("<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD> %s <20><><EFBFBD><EFBFBD><EFBFBD>涨<EFBFBD><E6B6A8><EFBFBD><EFBFBD>",pName);
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
memset(buf,0,sizeof(buf));
|
|
|
strcpy(buf,pName);
|
|
|
|
|
|
for(i =ilen -1; i>=0; i--)
|
|
|
{
|
|
|
if(('\\' == buf[i]) || ('/' == buf[i]))
|
|
|
{
|
|
|
ptr = buf+i+1;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
ilen = strlen(ptr);
|
|
|
for(i =ilen -1; i>0; i--)
|
|
|
{
|
|
|
if('.' == ptr[i])
|
|
|
{
|
|
|
ptr[i] ='\0';
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
ilen = strlen(ptr);
|
|
|
for(i =ilen -1; i>0; i--)
|
|
|
{
|
|
|
if('_' == ptr[i])
|
|
|
{
|
|
|
ptr[i] ='\0';
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
m_SqliteTmpName = ptr;
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
|
|
|
int mySqlite::GetTableName()
|
|
|
{
|
|
|
|
|
|
if (!m_dbptr)
|
|
|
{
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
int iRet;
|
|
|
// int iFind;
|
|
|
int iLen;
|
|
|
char * errmsg = NULL;
|
|
|
char **dbResult; //<2F><> char ** <20><><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>*<2A><>
|
|
|
int nRow, nColumn;
|
|
|
char * ptr;
|
|
|
// string stemp;
|
|
|
//char buf[16];
|
|
|
|
|
|
iRet = sqlite3_get_table(m_dbptr, SQL_GETTABLENAME_STR, &dbResult, &nRow, &nColumn, &errmsg);
|
|
|
if (SQLITE_OK == iRet)
|
|
|
{ //<2F><>ѯ<EFBFBD>ɹ<EFBFBD>
|
|
|
if(0 == nRow)
|
|
|
{
|
|
|
// WriteLog("<22><><EFBFBD>ݿ<EFBFBD> %s sql <20><><EFBFBD><EFBFBD> %s <20><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼Ϊ0",m_SqliteFileName,SQL_GETTABLENAME_STR);
|
|
|
sqlite3_free_table(dbResult);
|
|
|
return -2;
|
|
|
}
|
|
|
|
|
|
if(nColumn != 1)
|
|
|
{
|
|
|
// WriteLog("<22><><EFBFBD>ݿ<EFBFBD> %s sql <20><><EFBFBD><EFBFBD> %s <20><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1",m_SqliteFileName,SQL_GETTABLENAME_STR);
|
|
|
sqlite3_free_table(dbResult);
|
|
|
return -3;
|
|
|
}
|
|
|
|
|
|
int i;
|
|
|
for(i=0; i<nRow; i++)
|
|
|
{
|
|
|
ptr = dbResult[nColumn * (i + 1)];
|
|
|
if(0 == (strcmp(ptr,SQL_BLACKTAB_STR)))
|
|
|
{
|
|
|
m_TableName = SQL_BLACKTAB_STR;
|
|
|
sqlite3_free_table(dbResult);
|
|
|
return 0;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
for(i=0; i<nRow; i++)
|
|
|
{
|
|
|
ptr = dbResult[nColumn * (i + 1)];
|
|
|
iLen = strlen(ptr);
|
|
|
if(m_SqliteTmpName.length() == iLen)
|
|
|
{
|
|
|
if(0 == (strnicmp(ptr,m_SqliteTmpName.c_str(), iLen)))
|
|
|
{
|
|
|
m_TableName = ptr;
|
|
|
sqlite3_free_table(dbResult);
|
|
|
return 0;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// WriteLog("<22><><EFBFBD>ݿ<EFBFBD> %s δ<>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>",m_SqliteFileName);
|
|
|
sqlite3_free_table(dbResult);
|
|
|
return -5;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
WriteLog("<EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD> %s sql <20><><EFBFBD><EFBFBD> %s <20><>ѯʧ<D1AF><CAA7>",m_SqliteFileName.c_str(),SQL_GETTABLENAME_STR);
|
|
|
sqlite3_free_table(dbResult);
|
|
|
return -6;
|
|
|
}
|
|
|
|
|
|
//Close();
|
|
|
sqlite3_free_table(dbResult);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
int mySqlite::GetCountAndVerSion()
|
|
|
{
|
|
|
if (!m_dbptr)
|
|
|
{
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
int iRet;
|
|
|
int iLen;
|
|
|
char * errmsg = NULL;
|
|
|
char **dbResult; //<2F><> char ** <20><><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>*<2A><>
|
|
|
int nRow, nColumn;
|
|
|
//char buf[16];s'q
|
|
|
|
|
|
iRet = sqlite3_get_table(m_dbptr, SQL_GETCOUNTANDVER_STR, &dbResult, &nRow, &nColumn, &errmsg);
|
|
|
if (SQLITE_OK == iRet)
|
|
|
{ //<2F><>ѯ<EFBFBD>ɹ<EFBFBD>
|
|
|
if(0 == nRow)
|
|
|
{
|
|
|
//WriteLog("<22><><EFBFBD>ݿ<EFBFBD> %s sql <20><><EFBFBD><EFBFBD> %s <20><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼Ϊ0",m_SqliteFileName,SQL_GETCOUNTANDVER_STR);
|
|
|
sqlite3_free_table(dbResult);
|
|
|
return -2;
|
|
|
}
|
|
|
|
|
|
if(nColumn != 2)
|
|
|
{
|
|
|
//WriteLog("<22><><EFBFBD>ݿ<EFBFBD> %s sql <20><><EFBFBD><EFBFBD> %s <20><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2",m_SqliteFileName,SQL_GETCOUNTANDVER_STR);
|
|
|
sqlite3_free_table(dbResult);
|
|
|
return -3;
|
|
|
}
|
|
|
|
|
|
iLen = strlen(dbResult[0]);
|
|
|
if(iLen >128)
|
|
|
{
|
|
|
// WriteLog("<22><><EFBFBD>ݿ<EFBFBD> %s sql <20><><EFBFBD><EFBFBD> %s <20><>ѯ <20>汾̫<E6B1BE><CCAB>",m_SqliteFileName,SQL_GETCOUNTANDVER_STR);
|
|
|
sqlite3_free_table(dbResult);
|
|
|
return -4;
|
|
|
}
|
|
|
|
|
|
m_SqlVersion = dbResult[2];
|
|
|
iLen = strlen(dbResult[3]);
|
|
|
if (iLen > 10)
|
|
|
{
|
|
|
//Close();
|
|
|
//WriteLog("<22><><EFBFBD>ݿ<EFBFBD> %s sql <20><><EFBFBD><EFBFBD> %s <20><>ѯ<EFBFBD><D1AF>¼<EFBFBD><C2BC> ̫<><CCAB>",m_SqliteFileName,SQL_GETCOUNTANDVER_STR);
|
|
|
sqlite3_free_table(dbResult);
|
|
|
return -5;
|
|
|
}
|
|
|
|
|
|
iRet = isnumer(dbResult[3]);
|
|
|
if(iRet <0)
|
|
|
{
|
|
|
//WriteLog("<22><><EFBFBD>ݿ<EFBFBD> %s sql <20><><EFBFBD><EFBFBD> %s <20><>ѯ<EFBFBD><D1AF>¼<EFBFBD><C2BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",m_SqliteFileName,SQL_GETCOUNTANDVER_STR);
|
|
|
sqlite3_free_table(dbResult);
|
|
|
return -6;
|
|
|
}
|
|
|
|
|
|
m_RecordCount = atoi(dbResult[3]);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
WriteLog("<EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD> %s sql <20><><EFBFBD><EFBFBD> %s <20><>ѯʧ<D1AF><CAA7>",m_SqliteFileName.c_str(),SQL_GETCOUNTANDVER_STR);
|
|
|
sqlite3_free_table(dbResult);
|
|
|
return -7;
|
|
|
}
|
|
|
|
|
|
WriteLog("<EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD> %s m_SqlVersion %s m_RecordCount %d",m_SqliteFileName.c_str(),m_SqlVersion.c_str(),m_RecordCount);
|
|
|
//Close();
|
|
|
|
|
|
sqlite3_free_table(dbResult);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
int mySqlite::GetRecordCount()
|
|
|
{
|
|
|
return m_RecordCount;
|
|
|
}
|
|
|
|
|
|
string mySqlite::GetSqlVersion()
|
|
|
{
|
|
|
return m_SqlVersion;
|
|
|
}
|
|
|
|
|
|
string mySqlite::SqlFind(const char *KeyValue, bool &bFound, const bool bFindAll)
|
|
|
{
|
|
|
if (!m_dbptr)
|
|
|
{
|
|
|
bFound = false;
|
|
|
return "{\"RETCODE\":-5,\"ERRORINFO\":\"SQL<EFBFBD>ļ<EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\"}";
|
|
|
}
|
|
|
|
|
|
int iRet;
|
|
|
// int iLen;
|
|
|
char * errmsg = NULL;
|
|
|
char **dbResult; //<2F><> char ** <20><><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>*<2A><>
|
|
|
int nRow, nColumn;
|
|
|
string stemp,sRecord,skey;
|
|
|
int iFlag = 0;
|
|
|
|
|
|
//char buf[16];
|
|
|
|
|
|
bFound = false;
|
|
|
iRet = strlen(KeyValue);
|
|
|
if (iRet > MAX_PRIKEYVALUE_LEN)
|
|
|
{
|
|
|
return "{\"RETCODE\":-6,\"ERRORINFO\":\"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>̫<EFBFBD><EFBFBD>\"}";
|
|
|
}
|
|
|
|
|
|
|
|
|
try
|
|
|
{
|
|
|
iRet = GbkToUtf8(skey,KeyValue);
|
|
|
if(iRet <0)
|
|
|
{
|
|
|
return "{\"RETCODE\":-104,\"ERRORINFO\":\"<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>תutf8 ʧ<><CAA7>\"}";
|
|
|
}
|
|
|
|
|
|
stemp = "SELECT * FROM ";
|
|
|
stemp.append(m_TableName);
|
|
|
stemp.append(" WHERE ");
|
|
|
stemp.append(m_PriKey);
|
|
|
stemp.append("='");
|
|
|
stemp.append(skey);
|
|
|
stemp.append("'");
|
|
|
iRet = sqlite3_get_table(m_dbptr, stemp.c_str(), &dbResult, &nRow, &nColumn, &errmsg);
|
|
|
if (SQLITE_OK != iRet)
|
|
|
{
|
|
|
sqlite3_free_table(dbResult);
|
|
|
iFlag = 1;
|
|
|
|
|
|
// WriteLog("<22><><EFBFBD>ݿ<EFBFBD> %s sql <20><><EFBFBD><EFBFBD> %s <20><>ѯʧ<D1AF><CAA7>",m_SqliteFileName,stemp.c_str());
|
|
|
return "{\"RETCODE\":-7,\"ERRORINFO\":\"SQL ִ<>д<EFBFBD><D0B4><EFBFBD>\"}";
|
|
|
}
|
|
|
|
|
|
if(0 == nRow)
|
|
|
{
|
|
|
sqlite3_free_table(dbResult);
|
|
|
// WriteLog("<22><><EFBFBD>ݿ<EFBFBD> %s sql <20><><EFBFBD><EFBFBD> %s <20><>ѯ δ<>ҵ<EFBFBD>",m_SqliteFileName,stemp.c_str());
|
|
|
iFlag = 1;
|
|
|
return "{\"RETCODE\":-8,\"ERRORINFO\":\"SQL δ<>ҵ<EFBFBD><D2B5><EFBFBD>¼\"}";
|
|
|
}
|
|
|
|
|
|
bFound = true;
|
|
|
|
|
|
if (!bFindAll)
|
|
|
{
|
|
|
sRecord = "{\"RETCODE\":1";
|
|
|
iRet = nColumn ;
|
|
|
for (int j = 0; j < nColumn; j++)
|
|
|
{
|
|
|
sRecord.append(",\"");
|
|
|
sRecord.append(dbResult[j]);
|
|
|
|
|
|
sRecord.append("\":\"");
|
|
|
|
|
|
if(dbResult[iRet])
|
|
|
{
|
|
|
sRecord.append(dbResult[iRet]);
|
|
|
}
|
|
|
|
|
|
sRecord.append("\"");
|
|
|
iRet++;
|
|
|
}
|
|
|
sRecord.append(",\"backup2\":\"");
|
|
|
sRecord.append(m_SqlVersion);
|
|
|
|
|
|
sRecord += "\"}";
|
|
|
sqlite3_free_table(dbResult);
|
|
|
iFlag = 1;
|
|
|
|
|
|
|
|
|
stemp ="";
|
|
|
iRet = Utf8ToGbk(stemp,sRecord);
|
|
|
if(iRet <0)
|
|
|
{
|
|
|
bFound = false;
|
|
|
stemp = "{\"RETCODE\":-101,\"ERRORINFO\":\"<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>\"}";
|
|
|
}
|
|
|
|
|
|
return stemp;
|
|
|
}
|
|
|
|
|
|
stemp = "";
|
|
|
sRecord = "{\"RETCODE\":1,\"DATA\":[";
|
|
|
for (int i = 0; i < nRow; i++)
|
|
|
{
|
|
|
if (0 == i)
|
|
|
{
|
|
|
stemp.append("{");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
stemp.append(",{");
|
|
|
}
|
|
|
|
|
|
iRet = nColumn * (i + 1);
|
|
|
for (int j = 0; j < nColumn; j++)
|
|
|
{
|
|
|
if (j > 0)
|
|
|
{
|
|
|
stemp.append(",");
|
|
|
}
|
|
|
|
|
|
stemp.append("\"");
|
|
|
stemp.append(dbResult[j]);
|
|
|
stemp.append("\":\"");
|
|
|
if(dbResult[iRet])
|
|
|
{
|
|
|
stemp.append(dbResult[iRet]);
|
|
|
}
|
|
|
stemp.append("\"");
|
|
|
iRet++;
|
|
|
}
|
|
|
|
|
|
stemp.append(",\"backup2\":\"");
|
|
|
stemp.append(m_SqlVersion);
|
|
|
|
|
|
stemp.append("\"}");
|
|
|
}
|
|
|
|
|
|
sRecord.append(stemp);
|
|
|
sRecord.append("]}");
|
|
|
}
|
|
|
|
|
|
catch (...)
|
|
|
{
|
|
|
if (0 == iFlag)
|
|
|
{
|
|
|
sqlite3_free_table(dbResult);
|
|
|
}
|
|
|
sRecord = "{\"RETCODE\":-100,\"ERRORINFO\":\"<EFBFBD>쳣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\"}";
|
|
|
return sRecord;
|
|
|
}
|
|
|
|
|
|
sqlite3_free_table(dbResult);
|
|
|
|
|
|
stemp ="";
|
|
|
iRet = Utf8ToGbk(stemp,sRecord);
|
|
|
if(iRet <0)
|
|
|
{
|
|
|
bFound = false;
|
|
|
stemp = "{\"RETCODE\":-101,\"ERRORINFO\":\"<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>\"}";
|
|
|
}
|
|
|
|
|
|
return stemp;
|
|
|
}
|
|
|
|
|
|
string mySqlite::FinDWhere(const char *pWhere, bool &bFound)
|
|
|
{
|
|
|
|
|
|
if (!m_dbptr)
|
|
|
{
|
|
|
bFound = false;
|
|
|
return "{\"RETCODE\":-5,\"ERRORINFO\":\"SQL<EFBFBD>ļ<EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\"}";
|
|
|
}
|
|
|
|
|
|
int iRet;
|
|
|
// int iLen;
|
|
|
char * errmsg = NULL;
|
|
|
char **dbResult; //<2F><> char ** <20><><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>*<2A><>
|
|
|
int nRow, nColumn;
|
|
|
string stemp,sRecord,skey;
|
|
|
int iFlag = 0;
|
|
|
|
|
|
//char buf[16];
|
|
|
|
|
|
bFound = false;
|
|
|
try
|
|
|
{
|
|
|
iRet = GbkToUtf8(skey,pWhere);
|
|
|
if(iRet <0)
|
|
|
{
|
|
|
return "{\"RETCODE\":-104,\"ERRORINFO\":\"<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>תutf8 ʧ<><CAA7>\"}";
|
|
|
}
|
|
|
|
|
|
stemp = "SELECT * FROM ";
|
|
|
stemp.append(m_TableName);
|
|
|
stemp.append(" WHERE ");
|
|
|
stemp.append(skey);
|
|
|
iRet = sqlite3_get_table(m_dbptr, stemp.c_str(), &dbResult, &nRow, &nColumn, &errmsg);
|
|
|
if (SQLITE_OK != iRet)
|
|
|
{
|
|
|
sqlite3_free_table(dbResult);
|
|
|
iFlag = 1;
|
|
|
|
|
|
// WriteLog("<22><><EFBFBD>ݿ<EFBFBD> %s sql <20><><EFBFBD><EFBFBD> %s <20><>ѯʧ<D1AF><CAA7>",m_SqliteFileName,stemp.c_str());
|
|
|
return "{\"RETCODE\":-7,\"ERRORINFO\":\"SQL ִ<>д<EFBFBD><D0B4><EFBFBD>\"}";
|
|
|
}
|
|
|
|
|
|
if(0 == nRow)
|
|
|
{
|
|
|
sqlite3_free_table(dbResult);
|
|
|
// WriteLog("<22><><EFBFBD>ݿ<EFBFBD> %s sql <20><><EFBFBD><EFBFBD> %s <20><>ѯ δ<>ҵ<EFBFBD>",m_SqliteFileName,stemp.c_str());
|
|
|
iFlag = 1;
|
|
|
return "{\"RETCODE\":-8,\"ERRORINFO\":\"SQL δ<>ҵ<EFBFBD><D2B5><EFBFBD>¼\"}";
|
|
|
}
|
|
|
|
|
|
bFound = true;
|
|
|
|
|
|
/* if (!bFindAll)
|
|
|
{
|
|
|
sRecord = "{\"RETCODE\":1";
|
|
|
iRet = nColumn ;
|
|
|
for (int j = 0; j < nColumn; j++)
|
|
|
{
|
|
|
sRecord.append(",\"");
|
|
|
sRecord.append(dbResult[j]);
|
|
|
|
|
|
sRecord.append("\":\"");
|
|
|
sRecord.append(dbResult[iRet]);
|
|
|
sRecord.append("\"");
|
|
|
iRet++;
|
|
|
}
|
|
|
sRecord.append(",\"backup2\":\"");
|
|
|
sRecord.append(m_SqlVersion);
|
|
|
|
|
|
sRecord += "\"}";
|
|
|
sqlite3_free_table(dbResult);
|
|
|
iFlag = 1;
|
|
|
return sRecord;
|
|
|
}
|
|
|
*/
|
|
|
stemp = "";
|
|
|
sRecord = "{\"RETCODE\":1,\"DATA\":[";
|
|
|
for (int i = 0; i < nRow; i++)
|
|
|
{
|
|
|
if (0 == i)
|
|
|
{
|
|
|
stemp.append("{");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
stemp.append(",{");
|
|
|
}
|
|
|
|
|
|
iRet = nColumn * (i + 1);
|
|
|
for (int j = 0; j < nColumn; j++)
|
|
|
{
|
|
|
if (j > 0)
|
|
|
{
|
|
|
stemp.append(",");
|
|
|
}
|
|
|
|
|
|
stemp.append("\"");
|
|
|
stemp.append(dbResult[j]);
|
|
|
stemp.append("\":\"");
|
|
|
if(dbResult[iRet])
|
|
|
{
|
|
|
stemp.append(dbResult[iRet]);
|
|
|
}
|
|
|
stemp.append("\"");
|
|
|
iRet++;
|
|
|
}
|
|
|
|
|
|
stemp.append(",\"backup2\":\"");
|
|
|
stemp.append(m_SqlVersion);
|
|
|
|
|
|
stemp.append("\"}");
|
|
|
}
|
|
|
|
|
|
sRecord.append(stemp);
|
|
|
sRecord.append("]}");
|
|
|
}
|
|
|
|
|
|
catch (...)
|
|
|
{
|
|
|
if (0 == iFlag)
|
|
|
{
|
|
|
sqlite3_free_table(dbResult);
|
|
|
}
|
|
|
sRecord = "{\"RETCODE\":-100,\"ERRORINFO\":\"<EFBFBD>쳣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>\"}";
|
|
|
return sRecord;
|
|
|
}
|
|
|
|
|
|
sqlite3_free_table(dbResult);
|
|
|
|
|
|
stemp ="";
|
|
|
iRet = Utf8ToGbk(stemp,sRecord);
|
|
|
if(iRet <0)
|
|
|
{
|
|
|
bFound = false;
|
|
|
stemp = "{\"RETCODE\":-101,\"ERRORINFO\":\"<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>\"}";
|
|
|
}
|
|
|
|
|
|
return stemp;
|
|
|
}
|
|
|
|
|
|
|
|
|
int mySqlite::GetWriteTime( const char * pName)
|
|
|
{
|
|
|
// HANDLE hdle;
|
|
|
// BOOL bRet;
|
|
|
|
|
|
WIN32_FIND_DATA ffd ;
|
|
|
HANDLE hFind = FindFirstFile(pName,&ffd);
|
|
|
if(INVALID_HANDLE_VALUE == hFind)
|
|
|
{
|
|
|
|
|
|
WriteLog("<EFBFBD>ļ<EFBFBD> %s δ<>ҵ<EFBFBD>",pName);
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
m_WriteTime = ffd.ftLastWriteTime;
|
|
|
FindClose(hFind);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
string mySqlite::GetFileDate()
|
|
|
{
|
|
|
if(m_dbptr)
|
|
|
{
|
|
|
FILETIME localTime;
|
|
|
if (FileTimeToLocalFileTime(&m_WriteTime, &localTime))
|
|
|
{
|
|
|
SYSTEMTIME sysTime;
|
|
|
if (FileTimeToSystemTime(&localTime, &sysTime))
|
|
|
{
|
|
|
char strTime[50] = { 0 };
|
|
|
sprintf(strTime, "%04d-%02d-%02dT%02d:%02d:%02d", sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond);
|
|
|
return strTime;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return "2000-01-01T00:00:00";
|
|
|
}
|
|
|
|
|
|
string mySqlite::GetFieldValueByName(const char * pFieldName)
|
|
|
{
|
|
|
if (!m_dbptr)
|
|
|
{
|
|
|
return "";
|
|
|
}
|
|
|
|
|
|
int iRet;
|
|
|
int iLen;
|
|
|
char * errmsg = NULL;
|
|
|
char **dbResult; //<2F><> char ** <20><><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD>*<2A><>
|
|
|
int nRow, nColumn;
|
|
|
//char buf[16];
|
|
|
string stemp;
|
|
|
iLen = strlen(pFieldName);
|
|
|
if (iLen > MAX_PRIKEYNAME_LEN)
|
|
|
{
|
|
|
return "";
|
|
|
}
|
|
|
|
|
|
stemp = "SELECT ";
|
|
|
stemp.append(pFieldName);
|
|
|
stemp.append(" FROM ");
|
|
|
stemp.append(SQL_IDXTAB_STR);
|
|
|
stemp.append(" LIMIT 1");
|
|
|
|
|
|
iRet = sqlite3_get_table(m_dbptr, stemp.c_str(), &dbResult, &nRow, &nColumn, &errmsg);
|
|
|
if (SQLITE_OK != iRet)
|
|
|
{
|
|
|
sqlite3_free_table(dbResult);
|
|
|
return "";
|
|
|
}
|
|
|
|
|
|
if (0 != strcmp(dbResult[0], pFieldName))
|
|
|
{
|
|
|
sqlite3_free_table(dbResult);
|
|
|
return "";
|
|
|
}
|
|
|
|
|
|
stemp = dbResult[1];
|
|
|
sqlite3_free_table(dbResult);
|
|
|
|
|
|
//Close();
|
|
|
return stemp;
|
|
|
}
|
|
|
|
|
|
int mySqlite::isnumer(char cChar,int base)
|
|
|
{
|
|
|
if(10 == base)
|
|
|
{
|
|
|
if ((cChar >= 0x30) && (cChar <= 0x39))
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
else
|
|
|
{
|
|
|
return -1;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
else if(16 == base)
|
|
|
{
|
|
|
if ((cChar >= 0x30) && (cChar <= 0x39))
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
else if((cChar >= 0x41) && (cChar <= 0x46))
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
else if((cChar >= 0x61) && (cChar <= 0x66))
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return -2;
|
|
|
}
|
|
|
}
|
|
|
return -2;
|
|
|
}
|
|
|
|
|
|
int mySqlite::isnumer(char * buf,int base)
|
|
|
{
|
|
|
int iLen;
|
|
|
int iRet;
|
|
|
iLen = strlen(buf);
|
|
|
|
|
|
if(0 == iLen)
|
|
|
{
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
for(int i=0; i<iLen; i++)
|
|
|
{
|
|
|
iRet = isnumer(buf[i],base);
|
|
|
if(iRet <0)
|
|
|
{
|
|
|
return -2;
|
|
|
}
|
|
|
}
|
|
|
return 0;
|
|
|
}
|