Tag: sqlite

C – 如何将变量用作SQL查询的一部分?

介绍 我正在尝试使用C将变量合并到查询中。我正在使用sqlite tutorialspoint遵循本教程 ,并且我第一次使用SQL。 本教程向我展示了如何使用这些查询: 询问 sql = “UPDATE COMPANY set SALARY = 25000.00 where ID=1; ” \ “SELECT * from COMPANY”; *那么我如何将变量合并到这个语句中,例如,如果我想用赋予’ID’的变量替换1。 例如(我失败的尝试) sql = “UPDATE COMPANY set SALARY = 25000.00 where ID=” + variable + “;” \ “SELECT * from COMPANY”; 我在谷歌搜索,但我真的找不到使用C语言语法在sql查询中使用变量的任何材料。 我将如何以正确和安全的方式进行此操作,合并变量并且不会使程序易受SQL注入攻击?

vs2012:SQLite:访问冲突读取位置0x0000000C

我正在使用C在vs2012中实现SQLite Prepare-Statement。 我使用此链接作为教程来捕获每次运行代码时在我的机器上运行的进程。 一切都运行正常,除了prepare-statement不允许我把它放在do-while循环之外。 如果我把它放在do-while循环中,那么我实际上什么都不做,因为每次db-insertion都会再次执行prepare-statement,这是不切实际的。 但是,当我将prepare-statement放在do-while循环中并运行代码时,它工作正常(但它运行尽可能多的插入我必须插入)。 当我把do-while循环放在外面时,它会给我一个内存警告和中断。 这是我如何实现SQLite: BOOL GetProcessList(sqlite3 *db) { HANDLE hProcessSnap; HANDLE hProcess; PROCESSENTRY32 pe32; DWORD dwPriorityClass; sqlite3_stmt* stmt; char *errorMessage; char query[80] = “INSERT INTO Process_list VALUES (?1, ?2, ?3, ?4, ?5);”; // Take a snapshot of all processes in the system. hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); if( hProcessSnap == […]

sqlite3_open:“无法打开数据库文件”

执行rc = sqlite3_open(“test.db”,&db)时,我“无法打开数据库文件”; ?? sqlite3 *db; // sqlite3 db struct char *zErrMsg = 0; int rc; // Open the test.db file rc = sqlite3_open(“test.db”, &db); // <– creates DB if not found ?? if( rc ){ // failed fprintf(stderr, "ERROR: Can't open database: %s\n", sqlite3_errmsg(db)); }

如何检测sqlite3是否创建了数据库文件?

我正在编写一个程序,它使用sqlite3数据库文件来存储其数据。 如果我打开一个数据库文件 sqlite3_open_v2(filename, &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL) 如果数据库文件不存在,则创建该数据库文件。 如何在打开数据库文件之前查明数据库文件是否存在? sqlite3 shell使用如下代码: /* Go ahead and open the database file if it already exists. If the ** file does not exist, delay opening it. This prevents empty database ** files from being created if a user mistypes the database name argument ** to the sqlite […]

如何在c ++项目中使用sqlite3.c?

我试图在Eclipse的C ++项目中使用sqlite3,并在网上找到了大量关于使用API​​的建议,但不幸的是,我遇到了更早的障碍。 我想这是由于我缺乏C / C ++和CDT的经验。 我只是将sqlite3.c和sqlite3.h复制到项目的源文件夹中,并有一个测试方法,如下所示: int main() { sqlite3* db; sqlite3** dbpointer = &db; const char* dbname = “test.db”; sqlite3_open(dbname, dbpointer); return 0; } 但是,sqlite3.c文件在Eclipse中显示有很多错误。 例如,以下部分使用“字段”注释IN_DECLARE_VTAB’无法解析’。 #ifdef SQLITE_OMIT_VIRTUALTABLE #define IN_DECLARE_VTAB 0 #else #define IN_DECLARE_VTAB (pParse->declareVtab) #endif 当我尝试编译时,我得到一系列错误,如: gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF”src/sqlite3.d” -MT”src/sqlite3.d” -o “src/sqlite3.o” “../src/sqlite3.c” ../src/sqlite3.c:30997: error: initializer […]

sqlite3_open – 检查文件是否为sqlite3数据库时出现问题

我是第一次使用sqlite3,在打开文件之前无法正确检查文件。 到目前为止,sqlite总是在任何文件上返回OK。 此外,文件名是从GTK文件选择器返回的变量。 它返回一个绝对路径,我猜这不是问题。 谢谢你的帮助。 这是代码的片段: int rc; char *filename; sqlite3 *db; filename = gtk_file_chooser_get_filename(etc.); if(SQLITE_OK == rc = sqlite3_open(filename,&db)) { etc. }

Sqlite C接口获得单值结果

当我输入Sqlite时 SELECT Count(*) FROM tabl; 它返回一个数字。 准备语句后如何使用C接口获取此数字?

sqlite3_bind_text on select,不同的结果在准备vs字符串SQL语句

当我尝试将它用于select时,我的sqlite3_bind_text函数有问题。 目的是在我的数据的10分钟时间段内获得最新值。 如果我使用预准备语句并绑定我的值,则与具有SQL语法的普通字符串相比,结果会有所不同。 两个测试的SQL语法’应该’是相同的。 当代码运行时,我得到以下输出: test 1 = 0.000000 AnalogRPM <– Error test 2 = 7.700000 7.69999980926514 <– Correct value 在我看来,我的绑定语句返回列的名称而不是值(就像将值插入’AnalogRPM’ 有没有人经历过类似的事情? 或者你能看到我代码中的任何错误吗? 任何反馈意见:) char str[1000]; sqlite3_stmt *test1; /** First test, use prepared statement to get double value */ snprintf(str, sizeof(str), “select ? from DATA WHERE ts_sec BETWEEN ? AND ? ORDER BY rowid DESC […]

SQLite3并限制结果数量

是否有一种干净的方法来限制SQ​​Lite3 SELECT语句的命中数? 例如,我可以查询SELECT * FROM myTable WHERE name=’Smith’; 意识到我可能会遇到成千上万的点击。 我想让SQLite3告诉我它遇到的前10个然后终止查询。 我该怎么做呢? 如果SQLite3没有立即提供,那么我可以在SQLite3源代码中编辑任何可以重建的内容吗? 假设我在一个只有一个线程的环境中,我想在合理的时间内控制回来。

sqlite内存中的数据库和multithreading

我的应用程序使用sqlite作为后端创建一个内存数据库(:memory :)。 我希望我的主线程创建到内存数据库的连接,并且此连接由多个线程共享。 这可能吗? SQLite 3.7.8现在可供下载。 共享缓存是否可行?