sqlite操作数据库函数总结
1、 sqlite3_open 打开数据库函数,若数据库不存在,则创建
//打开数据库 //m_db 数据库句柄 //db_filename 数据库位置 sqlite3* m_db; if (SQLITE_OK != sqlite3_open(db_filename, &m_db)) { return false; }
2、sqlite3_prepare 准备sql语句
std::string selectsql = "select * from sqlite_master where name=control_update"; sqlite3_stmt *pstmt; if (SQLITE_OK != sqlite3_prepare(m_db, selectsql.c_str(), selectsql.size(), &pstmt, NULL)) return false;
3、sqlite3_step 执行sql语句
if (SQLITE_DONE != sqlite3_step(pstmt)) return false;
sqlite3_step返回值解释: SQLITE_DONE,当执行“insert”和“update”的时候返回此表示执行成功。 SQLITE_ROW,当执行“select”语句的时候肯定会返回多条数据,这个也表示执行成功,但是还没有结束,当返回SQLITE_DONE时表示执行结束,如:
std::string selectsql = "select typeid,md5 from control_update"; sqlite3_stmt *pstmt; if (SQLITE_OK != sqlite3_prepare(m_db, selectsql.c_str(), selectsql.size(), &pstmt, NULL)) return false; std::map<std::string, std::string>::iterator itr; //循环获取返回的数据 while (SQLITE_DONE != sqlite3_step(pstmt)) { const unsigned char* typeidvalue = sqlite3_column_text(pstmt, 0); const unsigned char* md5value = sqlite3_column_text(pstmt, 1); } sqlite3_finalize(pstmt);
4、sqlite3_exec sqlite3_exec和sqlite3_step函数的区别:
sqlite3_step() 在执行之前需要调用sqlite3_perpare(),之后需要sqlite3_finalize() sqlite3_exec() 就是把你提到的三个函数结合在了一起:sqlite3_step(), sqlite3_perpare(), sqlite3_finalize()。 然后提供一个回调函数进行结果的处理。
char* cErrMsg; int res = sqlite3_exec(m_db, "create table control_update(typeid,md5)", NULL, 0, &cErrMsg); if (res != SQLITE_OK) { return false; }
5、sqlite3_column_text 获取查询数据,这个是根据类型获取数据。相似的还有sqlite3_column_int、sqlite3_column_double、sqlite3_column_bytes等
std::string selectsql = "select * from sqlite_master where name=control_update"; sqlite3_stmt *pstmt; if (SQLITE_OK != sqlite3_prepare(m_db, selectsql.c_str(), selectsql.size(), &pstmt, NULL)) return false; //执行sql语句 sqlite3_step(pstmt); //第二个参数的数字表示获取第几个字段值 const unsigned char * value = sqlite3_column_text(pstmt, 0); sqlite3_finalize(pstmt);
6、sqlite3_close 关闭数据库
sqlite3_close(m_db);