SQLite C++获取表信息、获取列名、获取列类型
2015-12-09 17:46
429 查看
废话不说,直接上代码
struct table
{
string name;
string createSQL;
};
//获取表信息
void GetTables(vector<table>& vecTable)
{
char *szError= new char[256];
sqlite3_stmt *stmt = NULL;
sqlite3_prepare((sqlite3*)m_pDb,"select name,sql from sqlite_master where type='table' order by name",-1,&stmt,0);
vector<string> vecTables;
if(stmt)
{
while(sqlite3_step(stmt) == SQLITE_ROW)
{
table tb;
tb.name =(char *)sqlite3_column_text(stmt,0);
tb.createSQL = (char *)sqlite3_column_text(stmt,1);
vecTable.push_back(tb);
}
sqlite3_finalize(stmt);
stmt = NULL;
}
}
//获取列名
bool GetColName(vector<string>& vecColName, string strTableName)
{
sqlite3_stmt *stmt = NULL;
char sql[200];
sprintf(sql, "SELECT * FROM %s limit 0,1", strTableName.c_str());
char **pRes=NULL;
int nRow=0, nCol=0;
char *pErr=NULL;
//第一行是列名称
sqlite3_get_table((sqlite3*)m_pDb, sql, &pRes, &nRow, &nCol, &pErr);
for (int i=0; i<nRow; i++)
{
for (int j=0; j<nCol; j++)
{
char *pv = *(pRes+nCol*i+j);
vecColName.push_back(pv);
}
break;
}
if (pErr!=NULL)
{
sqlite3_free(pErr);
}
sqlite3_free_table(pRes);
return true;
}
//获取列类型
bool GetColType(vector<int>& vecType, string strTableName)
{
sqlite3_stmt *stmt = NULL;
char sql[200];
sprintf(sql, "SELECT * FROM %s limit 0,1", strTableName.c_str());
sqlite3_prepare((sqlite3*)m_pDb, sql,-1,&stmt,0);
if(stmt)
{
while(sqlite3_step(stmt) == SQLITE_ROW)
{
int nCount = sqlite3_column_count(stmt);
for (int i=0; i<nCount; i++)
{
int nValue = sqlite3_column_int(stmt,0);
int nType = sqlite3_column_type(stmt, i);
vecType.push_back(nType);
switch (nType)
{
case 1:
//SQLITE_INTEGER
break;
case 2:
//SQLITE_FLOAT
break;
case 3:
//SQLITE_TEXT
break;
case 4:
//SQLITE_BLOB
break;
case 5:
//SQLITE_NULL
break;
}
}
break;
}
sqlite3_finalize(stmt);
stmt = NULL;
}
return true;
}
struct table
{
string name;
string createSQL;
};
//获取表信息
void GetTables(vector<table>& vecTable)
{
char *szError= new char[256];
sqlite3_stmt *stmt = NULL;
sqlite3_prepare((sqlite3*)m_pDb,"select name,sql from sqlite_master where type='table' order by name",-1,&stmt,0);
vector<string> vecTables;
if(stmt)
{
while(sqlite3_step(stmt) == SQLITE_ROW)
{
table tb;
tb.name =(char *)sqlite3_column_text(stmt,0);
tb.createSQL = (char *)sqlite3_column_text(stmt,1);
vecTable.push_back(tb);
}
sqlite3_finalize(stmt);
stmt = NULL;
}
}
//获取列名
bool GetColName(vector<string>& vecColName, string strTableName)
{
sqlite3_stmt *stmt = NULL;
char sql[200];
sprintf(sql, "SELECT * FROM %s limit 0,1", strTableName.c_str());
char **pRes=NULL;
int nRow=0, nCol=0;
char *pErr=NULL;
//第一行是列名称
sqlite3_get_table((sqlite3*)m_pDb, sql, &pRes, &nRow, &nCol, &pErr);
for (int i=0; i<nRow; i++)
{
for (int j=0; j<nCol; j++)
{
char *pv = *(pRes+nCol*i+j);
vecColName.push_back(pv);
}
break;
}
if (pErr!=NULL)
{
sqlite3_free(pErr);
}
sqlite3_free_table(pRes);
return true;
}
//获取列类型
bool GetColType(vector<int>& vecType, string strTableName)
{
sqlite3_stmt *stmt = NULL;
char sql[200];
sprintf(sql, "SELECT * FROM %s limit 0,1", strTableName.c_str());
sqlite3_prepare((sqlite3*)m_pDb, sql,-1,&stmt,0);
if(stmt)
{
while(sqlite3_step(stmt) == SQLITE_ROW)
{
int nCount = sqlite3_column_count(stmt);
for (int i=0; i<nCount; i++)
{
int nValue = sqlite3_column_int(stmt,0);
int nType = sqlite3_column_type(stmt, i);
vecType.push_back(nType);
switch (nType)
{
case 1:
//SQLITE_INTEGER
break;
case 2:
//SQLITE_FLOAT
break;
case 3:
//SQLITE_TEXT
break;
case 4:
//SQLITE_BLOB
break;
case 5:
//SQLITE_NULL
break;
}
}
break;
}
sqlite3_finalize(stmt);
stmt = NULL;
}
return true;
}
相关文章推荐
- 只说说C++内联函数
- 浅谈C++中指针和引用的区别
- C++设计模式之AbstractFactory
- 学习笔记-delete p与delete []p-sizeof()-strtok
- C语言中extern的用法
- 树与二叉树
- c++实现skip list
- C++primer学习:标准库特殊设施:bitset
- c++实现的快速排序算法
- DOMDocument redefined问题
- C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
- 设计模式之适配器模式
- c++ 回调函数封装
- VC++ 调用 C#生成DLL的两种方法
- C++ 调用 Java 返回String类型
- 关于visual studio(vs)debug和release问题
- Hdu 4145 Cover The Enemy(大开脑洞)
- 柔性数组
- 用C语言单链表实现的一个DotA2英雄管理系统(其实我一直羞于承认这算一个系统。。)
- 纯中文C++代码,可运行