Как передать путь к файлу во время выполнения в SQL-выражении с использованием программирования C

Я пытаюсь объединить две базы данных SQL с одной и той же схемой с использованием программирования на Си. Поскольку я новичок в SQL, я попытался слить код ниже, используя программирование на Си.
Но я не смог объединить его, так как не смог передать путь к файлу в операторе 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 во время выполнения.
Ваша помощь высоко ценится.

Заранее спасибо.

-1

Решение

Это может быть достигнуто путем объявления 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 );
0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector