【基础】SQLite的基本使用方法

【基本SQL语句】

// 创建
"CREATE TABLE IF NOT EXISTS my_table (number TEXT PRIMARY KEY, name TEXT, age TEXT);";
// 查询
"SELECT * FROM my_table WHERE number = ?;";
"SELECT age FROM my_table WHERE number = ?;";
// 删除
"DELETE FROM my_table WHERE number = ?;";
// 插入(无法替换)
"INSERT INTO my_table (number, name) VALUES (?, ?);";
// 替换(有插入功能)
"REPLACE INTO my_table (number, name) VALUES ( ?, ?);";
【基本步骤】

// 1. 打开数据库文件(filename:文件名(绝对路径+文件名))
sqlite3_open(const char *filename, sqlite3 **ppDb);
// 2. 准备SQL语句(zSql:SQL语句(UTF-8), nByte:语句字节数(含'\0',如果小于0会取字符串长度), sqlite3_stmt:预编译语句句柄(输出), pxTail:指向SQL语句中未使用部分)
sqlite3_prepare_v2(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pxTail);
// 3. 设置SQL语句中的值(index:绑定第几个数据(SQL中第几个问号,从1开始), value:数据(值), nByte:值得长度, 析构回调函数(参数有两个常数))
sqlite3_bind_text(sqlite3_stmt *, int index, const char *value, int nByte, void (*)(void *));
// 4. 执行SQL语句
sqlite3_step(sqlite3_stmt *);
// 5. 接收返回参数(iCol:返回参数的列索引(最左一列为0))
sqlite3_column_text(sqlite3_stmt *, int iCol);
// 6. 关闭数据库文件
sqlite3_close(sqlite3 *);

// 获取接收参数总数
sqlite3_column_count(sqlite3_stmt *pStmt);
// 重置绑定值(<span style="font-size:12px;"><span style="font-family: Arial; line-height: 26px; color: red;">sqlite3_reset</span><span style="font-family: Arial; line-height: 26px; color: red;">并不改变在准备语句上的任何绑定值,只会重置绑定的值,也就是说SQL语句不会重置,结构体将回到prepare之后bind之前的状态。</span></span>)
sqlite3_reset(sqlite3_stmt *pStmt);

【使用示例】

// 创建
const char *sql_create = "CREATE TABLE IF NOT EXISTS t_data (number TEXT PRIMARY KEY, name TEXT, age TEXT, sex TEXT);";
sqlite3_stmt *stmt;
sqlite3_prepare_v2(_db, sql_create, -1, &stmt, NULL);
sqlite3_step(stmt);
sqlite3_finalize(stmt);
// 插入(替换)
const char *sql_insert = "INSERT INTO t_data (number, name) VALUES (?, ?);";
const char *sql_update = "REPLACE INTO t_data (number, name) VALUES ( ?, ?);";
sqlite3_stmt *stmt;
sqlite3_prepare_v2(_db, sql_update, -1, &stmt, NULL);
sqlite3_bind_text(stmt, 1, "1007", -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 2, "Dolhin", -1, SQLITE_TRANSIENT);
sqlite3_step(stmt);
sqlite3_finalize(stmt);
// 查询
const char *sql_select = "SELECT * FROM t_data WHERE number = ?;";
const char *sql_select = "SELECT name FROM t_data WHERE number = ?;";
sqlite3_stmt *stmt;
sqlite3_prepare_v2(_db, sql_select, -1, &stmt, NULL);
sqlite3_bind_text(stmt, 1, "1007", -1, SQLITE_TRANSIENT);
sqlite3_step(stmt);
int count = sqlite3_column_count(stmt); // 接收总数
for (int i = 0; i < count; i++)
{
	const unsigned char *text = sqlite3_column_text(stmt, i); // 接收参数
	printf("%s", text);
}
sqlite3_finalize(stmt);
// 删除
const char *sql_remove = "DELETE FROM t_data WHERE number = ?;";
sqlite3_stmt *stmt;
sqlite3_prepare_v2(_db, sql_remove, -1, &stmt, NULL);
sqlite3_bind_text(stmt, 1, "1007", -1, SQLITE_TRANSIENT);
sqlite3_step(stmt);
sqlite3_finalize(stmt);
【返回判断】

int ok=sqlite3_prepare_v2(_db, sql_createtable, -1, &stmt, NULL);
ok |= sqlite3_step(stmt);
ok |= sqlite3_finalize(stmt);   
if( ok != SQLITE_OK && ok != SQLITE_DONE)
{
    printf("[sqlite3] Error in CREATE TABLE\n");
}
【其他设置】

// 高级设置
//sqlite3_exec(_db, "PRAGMA synchronous = OFF", 0 ,0, 0); // 提交性能
//sqlite3_exec(_db, "PRAGMA cache_size = 8000", 0 ,0, 0); // 加大缓存
//sqlite3_exec(_db, "PRAGMA count_changes = 1", 0 ,0, 0); // 返回改变记录数
//sqlite3_exec(_db, "PRAGMA case_sensitive_like = 1", 0 ,0, 0); // 支持中文LIKE查询

【参考文档】

http://blog.csdn.net/ldpjay/article/details/46441617

http://blog.csdn.net/mamong/article/details/8441091

http://blog.csdn.net/exclusivepig/article/details/4575279


猜你喜欢

转载自blog.csdn.net/ldpjay/article/details/46506079