Подготовленные операторы SQLite не вставляются, если текст привязки содержит тире
Я столкнулся с проблемой, что поле TEXT в TABLE не может быть привязано к строке, содержащей тире. Если я удаляю или заменяю тире / тире против любого символа, подготовленное и связывающее выражение работает отлично.
Здесь два фрагмента кода. Демонстрационная таблица похожа на "создать таблицу MyTable (SomeTime text)"
//do not work... runs into commit!! but add nothing to MyTable
int result = sqlite3_exec(validSqlite3, "begin;", nullptr, nullptr, nullptr);
if (result != SQLITE_OK)
return;
sqlite3_stmt* stmt = nullptr;
bool ok = true;
if (sqlite3_prepare_v2(validSqlite3, "insert into MyTable (SomeTime) values (?);", -1, &stmt, nullptr) != SQLITE_OK)
ok = false;
if (ok && sqlite3_bind_text(stmt, 1, "2016-11-01 12:00:00", -1, SQLITE_TRANSIENT) != SQLITE_OK)
ok = false;
if (ok && sqlite3_step(stmt) != SQLITE_DONE)
ok = false;
if (ok && sqlite3_finalize(stmt) != SQLITE_OK)
ok = false;
if (ok)
sqlite3_exec(validSqlite3, "commit;", nullptr, nullptr, nullptr);
else
sqlite3_exec(validSqlite3, "rollback;", nullptr, nullptr, nullptr);
//same code as above... BUT: no dashes in the text field
//works fine... runs into commit and inserts a new row in MyTable with column SomeTime content: "2016/11/01 12:00:00"
int result = sqlite3_exec(validSqlite3, "begin;", nullptr, nullptr, nullptr);
if (result != SQLITE_OK)
return;
sqlite3_stmt* stmt = nullptr;
bool ok = true;
if (sqlite3_prepare_v2(validSqlite3, "insert into MyTable (SomeTime) values (?);", -1, &stmt, nullptr) != SQLITE_OK)
ok = false;
if (ok && sqlite3_bind_text(stmt, 1, "2016/11/01 12:00:00", -1, SQLITE_TRANSIENT) != SQLITE_OK)
ok = false;
if (ok && sqlite3_step(stmt) != SQLITE_DONE)
ok = false;
if (ok && sqlite3_finalize(stmt) != SQLITE_OK)
ok = false;
if (ok)
sqlite3_exec(validSqlite3, "commit;", nullptr, nullptr, nullptr);
else
sqlite3_exec(validSqlite3, "rollback;", nullptr, nullptr, nullptr);