Почему тот же SQL-запрос недействителен в программе на C++, но результаты печатаются в браузере BD ⇐ C++
-
Anonymous
Почему тот же SQL-запрос недействителен в программе на C++, но результаты печатаются в браузере BD
У меня есть программа на C++, использующая SQLite версии 3.43.1. (Браузер БД версии 3.12.2 с SQLite версии 3.35.5). Я создаю таблицу и вставляю в нее данные. Когда я хочу прочитать таблицу: SELECT NAME FROM «mytable», я получаю код ошибки 1 и сообщение об ошибке нет такой таблицы: mytable.
ПРИМЕЧАНИЕ: во многих предыдущих ответах говорилось: «Вам нужно указать на базу данных». Я запрашиваю ту же базу данных, в которую писал, без ошибок. Я также использую браузер БД (когда моя программа отключена), использую тот же самый запрос и вижу свои данные.
Я также использовал следующий запрос в своей программе, чтобы просмотреть список таблиц: SELECT * FROM sqlite_master WHERE name LIKE 'mytable'.
Как это вообще возможно? Я понятия не имею, как действовать дальше.
Также обратите внимание: я попробовал и sqlite_exec, и подход без переноса (prepare_v2, шаг, sqlite3_column_text). На данный момент я не понимаю, как переключение между использованием обратного вызова или шага + столбца_текста приводит к каким-либо изменениям.
Создание базы данных осуществляется с помощью обычного sqlite3_open. Никаких аргументов, кроме пути к файлу. При создании таблицы используется CREATE TABLE mytable по умолчанию (ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, NAME TEXT NOT NULL, VAL TEXT);. Больше ничего.
Я компилирую с помощью g++ 12.3.0 в Ubuntu 12.3.0 (через Windows WSL) файлы sqlite3.h и sqlite3.c, предоставленные архивированным архивом sqlite-amalgamation-343100 с веб-сайта sqlite.
Эквивалентная команда компиляции: gcc -fPIC -lpthread -ldl -lm -c sqlite3.o -o code/sqlite-amalgamation-3430100/sqlite3.c
db.h
#pragma один раз // Третья сторона #include // Стандарт C++ #include #include #include #include #include #include класс БД { публика: void setFilepath(std::filesystem::path); std::filesystem::path getFilepath(); недействительное соединение (); недействительно закрыть(); недействительная запись (std::string); недействительное чтение (std::string); частный: sqlite3* БД; std::filesystem::path db_path; } db.cpp
#include "db.h" статический обратный вызов int (void* list, int cols, char** dat, char** colname) { std::cout
У меня есть программа на C++, использующая SQLite версии 3.43.1. (Браузер БД версии 3.12.2 с SQLite версии 3.35.5). Я создаю таблицу и вставляю в нее данные. Когда я хочу прочитать таблицу: SELECT NAME FROM «mytable», я получаю код ошибки 1 и сообщение об ошибке нет такой таблицы: mytable.
ПРИМЕЧАНИЕ: во многих предыдущих ответах говорилось: «Вам нужно указать на базу данных». Я запрашиваю ту же базу данных, в которую писал, без ошибок. Я также использую браузер БД (когда моя программа отключена), использую тот же самый запрос и вижу свои данные.
Я также использовал следующий запрос в своей программе, чтобы просмотреть список таблиц: SELECT * FROM sqlite_master WHERE name LIKE 'mytable'.
Как это вообще возможно? Я понятия не имею, как действовать дальше.
Также обратите внимание: я попробовал и sqlite_exec, и подход без переноса (prepare_v2, шаг, sqlite3_column_text). На данный момент я не понимаю, как переключение между использованием обратного вызова или шага + столбца_текста приводит к каким-либо изменениям.
Создание базы данных осуществляется с помощью обычного sqlite3_open. Никаких аргументов, кроме пути к файлу. При создании таблицы используется CREATE TABLE mytable по умолчанию (ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, NAME TEXT NOT NULL, VAL TEXT);. Больше ничего.
Я компилирую с помощью g++ 12.3.0 в Ubuntu 12.3.0 (через Windows WSL) файлы sqlite3.h и sqlite3.c, предоставленные архивированным архивом sqlite-amalgamation-343100 с веб-сайта sqlite.
Эквивалентная команда компиляции: gcc -fPIC -lpthread -ldl -lm -c sqlite3.o -o code/sqlite-amalgamation-3430100/sqlite3.c
db.h
#pragma один раз // Третья сторона #include // Стандарт C++ #include #include #include #include #include #include класс БД { публика: void setFilepath(std::filesystem::path); std::filesystem::path getFilepath(); недействительное соединение (); недействительно закрыть(); недействительная запись (std::string); недействительное чтение (std::string); частный: sqlite3* БД; std::filesystem::path db_path; } db.cpp
#include "db.h" статический обратный вызов int (void* list, int cols, char** dat, char** colname) { std::cout
Мобильная версия