gpt4 book ai didi

c++ - 如何使用C编程在sql语句中在运行时传递文件路径

转载 作者:行者123 更新时间:2023-11-30 19:44:25 24 4
gpt4 key购买 nike

我正在尝试使用 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: %s\n", sqlite3_errmsg(db));
exit(0);
}
else
{
printf("Opened database successfully\n");
}
/*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: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
else
{
printf("%s merged New_student.db successfully with old_student.db\n");
}
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++ - 如何使用C编程在sql语句中在运行时传递文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28260261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com