Tag: sqlite

如何使用基于现有文件数据库的模式创建内存数据库

我有一个现有的数据库,该结构在整个应用程序中使用。 数据库的实例定期轮换。 我有一个数据库文件template.sqlite ,它用作所有新创建的数据库的模板。 我想使用它,而不是创建脚本,因此我只需要维护一个文件,即空数据库模板本身。 我想基于该模板文件创建一个具有相同结构的内存数据库。 我知道我可以打开数据库并读取它的结构,然后在内存中手动创建数据库。 如果可能的话,我希望能够以更自动的方式进行。

从CSV读取数据并放入数据库

我有一个包含6列的表格,我有像这样的CSV导出,每行有6个条目 me;val1;val2;val3;val4;val5; me;val1;val2;val3;val4;val5; 我需要阅读这些条目并将其插入SQLITE3数据库中。以便解析我使用的CSV void readcsv() { FILE* stream = fopen(“input.csv”, “r”); char line[1024]; while (fgets(line, 1024, stream)) { char* tmp = strdup(line); printf(“Field 3 would be %s\n”, getcsvfield(tmp, 3)); // NOTE strtok clobbers tmp free(tmp); } } //Used for parsing CSV const char* getcsvfield(char* line, int num) { const char* tok; for (tok = […]

SQLite3:非ascii字符未正确更新?

我正在尝试在我的C程序上使用sqlite3_bind_text16()更新sqlite行上的特定文本列(WVARCHAR)但不幸的是,只有包含像L”e”这样的ascii编码字符的字符串才能正确更新,但其他字符串包含更新了像L”é”这样的unicode字符,其中非ascii字符未正确存储。 这是我如何使用该函数的示例: sqlite3_bind_text16(stmt, 1, L”e”, -1, SQLITE_STATIC); //e is stored correctly sqlite3_bind_text16(stmt, 2, L”é”, -1, SQLITE_STATIC); //é not stored correctly: modified 我通过使用sqlite shell为我的程序的sqlite数据库文件执行select命令来测试它。 那怎么解决呢?

使用SQLite FTS4进行自动OR查询

我有一个SQLite FTS4数据库,我希望能够通过用户输入对它进行OR查询,例如,如果用户输入“你好那里”,我想做 SELECT * FROM fts_table WHERE text MATCHES ‘hello OR there’. 但是,如果我传递简单地传入用户字符串,我会得到一个隐式的AND查询。 我当然可以自己标记字符串,并插入OR,但后来我使用自己的tokenizer,它可能与SQLite的FTS内部使用的tokenizer不同。 有没有办法从我的C包装器访问SQLite标记生成器,或者构建执行此操作的SQL查询,方法如下: SELECT * FROM fts_table WHERE text MATCHES interpolate(‘hello there’, ‘ OR ‘) 谢谢任何指针将不胜感激。 编辑: 这个问题的任何未来读者都应该注意另一个问题: 如何为SQLite FTS查询转义字符串,只是在字符串中插入OR是不安全的,因为你经常会得到无效的字符串,例如,如果用户输入hello AND there插值OR将创建无效的hello OR AND OR there这是无效的。 所以

sqlite3 one_file VFS失败

我试图从sqlite3 VFS示例运行test_onefile.c 示例 ,我得到以下失败: test_onefile: test_onefile.c:693: fsDelete: Assertion `strpcmp(“-journal”, &zPath[nName])==0′ failed. 我运行的代码如下: int retval; fs_register(); int q_cnt = 5,q_size = 150,ind = 0; char **queries = (char**) malloc(sizeof(char) * q_cnt * q_size); sqlite3_stmt *stmt; sqlite3 *handle; retval = sqlite3_open_v2( “sampledb.sqlite2”, &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE , “fs”); if(retval) { printf(“Database connection failed\n”); return -1; } printf(“Connection […]

在sqlite的回调函数中动态重新分配2个dim数组

我正在研究sqlite-.dll用于教育目的。 我试图在每次使用数据库中的新行调用回调函数时动态地在我的2维数组中添加一行。 (例如SELECT * FROM CUSTOMER)。 然后,应将此数组中存储的数据作为C接口返回。 SQLCONTROL_API char** sql_execQuery(char *dbName, char *sqlStatement) { char **a = 0; /*Some sqlite stuff*/ int rc = sqlite3_exec(db, sqlStatement, callback, &a, &zErrMsg); return a; } 使用回调函数: static int callback(void *data, int argc, char **argv, char **azColName) { char **old = (char **)data; int num_rows = sizeof(old) / sizeof(old[0]); […]

C. sqlite3_exec中的SQLite:回调函数中的参数设置在main()中调用时打印不完整的数据

我正在努力实现一些非常基本的东西。 但不幸的是,我无法得到预期的结果。 我有一个名为emp_info的sqlite表,在以下字段中有9个员工记录: SR_NO [0],NAME [1],AGE [2],SEX [3],ADDRESS [4],EMPID [5],CARDID [6]和SALARY [7] 。 要访问该表并按照sql查询获取员工记录,我在C中有以下程序: #include #include #include #include static int callback(void *param, int argc, char *argv[], char **azColName){ int i=0; if(argc == 0) return 0; char **res = (char **)param; *res = (char *)realloc(*res, sizeof(*res)); //for(i=0; i<argc; i++){ //printf("%s = %s\n", azColName[i], argv[i] ? argv[i] […]

Cite / C ++中的SQLite。 sqlite3_exec:回调函数中的参数集指向空字符串

我正在尝试一些非常基本的东西 – 使用SQLite的C / C ++接口返回SELECT语句的结果。 我的数据表只有两个字段 – 键(varchar)和值(文本)。 鉴于密钥,我的目标是通过查询SQLite数据库来返回值。 我传递给* sqlite3_exec * – * select_callback *函数以及param (char *)。 param在* select_callback *中成功设置为正确的值。 但是,在调用* sqlite3_exec * param指向空字符串后(尽管指向相同的内存)。 知道出了什么问题以及如何解决这个问题? * sqlite3_exec *在幕后为param释放内存吗? 先感谢您! // given the key tid returns the value void getTypeByID(sqlite3 * db, string tid) { string sql_exp_base = “select value from Data where key=””; […]

SQLite和C ++入门?

对于我正在制作的在线游戏,我需要能够将用户及其统计数据添加到数据库,示例表: 用户名,密码,电子邮件,胜利,失败 用户名将是唯一键,从那里我需要检索其他信息。 我还需要做其他事情,比如找到给定电子邮件的所有用户名。 我一直在寻找几个小时的SQLite教程,该教程展示了如何完成这些简单任务的C或C ++。 任何人都可以推荐这样的教程,或者可能对使用SQLite库执行上述任务的一些见解? 谢谢

在sqlite3源代码中混淆sqlite3结构

在function static int sqlite3Prepare( sqlite3 *db, /* Database handle. */ const char *zSql, /* UTF-8 encoded SQL statement. */ int nBytes, /* Length of zSql in bytes. */ int saveSqlFlag, /* True to copy SQL text into the sqlite3_stmt */ Vdbe *pReprepare, /* VM being reprepared */ sqlite3_stmt **ppStmt, /* OUT: A pointer to the […]