如何使用 C 编程在运行时在 SQL 语句中传递文件路径
how to pass file path in run time in sql statement using C programming
我正在尝试使用 C 编程合并两个具有相同模式的 SQL 数据库。由于我是SQL新手,我尝试了以下代码使用C编程进行合并。但是我无法合并它,因为我无法在运行时传递 sql 语句中的文件路径。如何在下面的sql语句中传递文件路径,以便我可以合并。
/创建 SQL 语句以合并两个数据库/
rc = sqlite3_open(argv[1], &db); /*-----> argv[1] is old_student.db*/
if( rc )
{
printf("Can't open database: %sn", sqlite3_errmsg(db));
exit(0);
}
else
{
printf("Opened database successfullyn");
}
/*Create SQL statement to merge two DBs*/
sql = "attach '<file_path_name>' as toMerge; /*--------> how to pass file path here in runtime */
BEGIN;
insert or ignore into student_table (Name, AGE, Address)
select Name, AGE, Address from toMerge.student_table;
COMMIT;";
/* Execute SQL statement */
rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
if( rc != SQLITE_OK )
{
printf("SQL error: %sn", zErrMsg);
sqlite3_free(zErrMsg);
}
else
{
printf("%s merged New_student.db successfully with old_student.dbn");
}
sqlite3_close(db);
请让我知道我应该如何在运行时在 SQL 语句中传递参数。非常感谢您的帮助。
提前谢谢。
这可以
通过将sql
数组声明为 VLA 来实现,然后使用 sprintf
构造查询,如下所示。
static const char *prefix = "attach '";
static const char *suffix =
"' as toMerge;"
" BEGIN;"
" insert or ignore into student_table (Name, AGE, Address)"
" select Name, AGE, Address from toMerge.student_table;"
" COMMIT;";
int length = strlen(prefix) + strlen(argv[1]) + strlen(suffix) + 1;
char sql[length];
sprintf( sql, "%s%s%s", prefix, argv[1], suffix );
相关文章:
- 如何将更多文件夹添加到c++include路径
- 从函数角度看ID到文件路径的内部与外部映射
- 在C++中设置基于操作系统的文件路径
- C++17 文件系统::remove_all 带有通配符路径
- 从 C 中的变量获取文件的路径,C++
- 将共享库的搜索路径更改为生成文件中提供的 rpath
- 修改生成文件以简化框架 #include 路径
- 将Visual Studio Code路径设置为.clang_format文件
- Windows 非 ASCII 文件路径
- 非 ASCII 文件路径窗口
- C++和带有国家符号的文件路径(也许用 UTF8 编码)
- 获取 H5::D ataSet 的hid_t和文件中的路径以使用 H5OCopy
- 在特定 Unicode 路径中创建文件
- 如何让用户在 tinyxml2 中输入 XML 文件的路径
- 如何将COM .tlb文件导入具有相对路径C++文件中?
- C++ 路径文件存在限制为 260 个字符
- QT-在pro中指定DLL路径.文件
- 路径文件存在导致链接器错误 2028/2019
- 选择QTableWidgetItem qt的路径文件
- 如何有一个正确的路径文件读取它到stringstream