#include "SqlApi.h"
int sqlApi::open( char* file )
{
#ifdef WIN32
if (_access(file, 0)==-1)
{
return -1;//无法找到文件
}
#endif
strcpy(dbname,file);
return sqlite3_open(file,&dbFile);
}
int sqlApi::get_res( char *sql,vector<vector<string>> &vec )
{
vec.clear();
this->init();
vector<string> col_vec;
string tmp;
char **res;
int col=0,row=0;
char *errorMsg=0;
string errorStringCode;
sqlite3_get_table(dbFile,sql,&res,&row,&col,&errorMsg);
#ifdef s3db
if (errorMsg!=NULL)
{
errorStringCode=errorMsg;
if (errorStringCode.find("no such table")>=0)
{
return no_such_tbl;
}
if (errorStringCode.find("syntax error")>=0)
{
return sql_error;
}
}
#endif
for (int i=0;i<=row;i++)
{
col_vec.clear();
for (int ii=0;ii<col;ii++)
{
if (res[i*col+ii]==0)
{
tmp="";
}
else
tmp=res[i*col+ii];
col_vec.push_back(tmp);
}
vec.push_back(col_vec);
}
sqlite3_free_table(res);
sqlite3_close(dbFile);
return row;
}
int sqlApi::init()
{
this->open(dbname);
return 0;
}
int sqlApi::update( char* sql )
{
char *errorMsg=0;
string errorStringCode="";
sqlite3_stmt *stat;
int res=-1;
this->init();
res= sqlite3_prepare(dbFile, sql, -1, &stat, 0);
if (res!=0)
{
return -1;
}
res= sqlite3_step(stat);
res= sqlite3_finalize(stat);
return res;
}
int sqlApi::insert( char *sql )
{
sqlite3_stmt *stat;
int res=-1;
this->init();
res= sqlite3_prepare(dbFile, sql, -1, &stat, 0);
if (res!=0)
{
return -1;
}
res= sqlite3_step(stat);
res= sqlite3_finalize(stat);
res=sqlite3_last_insert_rowid(dbFile);
return res;
}
int sqlApi::del( char* sql )
{
sqlite3_stmt *stat;
int res=-1;
char *errorMsg;
this->init();
res= sqlite3_prepare(dbFile, sql, -1, &stat, 0);
if (res!=0)
{
return -1;
}
res= sqlite3_step(stat);
res= sqlite3_finalize(stat);
res=sqlite3_last_insert_rowid(dbFile);
res = sqlite3_exec(dbFile, "COMMIT;", 0, 0, &errorMsg);
#ifdef s3db
if (errorMsg==NULL)
{
return res;
}
else
{
string msgCode=errorMsg;
if (msgCode.find("cannot commit")>=0)
{
return cannot_commit;
}
}
#endif
return res;
}
int main()
{
sqlApi sql;
sql.open("r:/data.s3db");
sql.update("update call_out_log set state=3 where id=2");
sql.insert("insert into call_out_log (telno,state) values('123456',4)");
sql.del("delete from call_out_log2 where id=3");
return 0;
}