Я использую sqlite3pp для управления базой данных. Когда я попытался вставить одну запись дважды в одной и той же таблицы, запустивИсключение catch в sqlite3pp
sqlite3pp::command cmd(db, "INSERT INTO Groups (Name) VALUES (?)");
cmd.binder() << "Group_one";
cmd.execute();
он бросил в excpetion и показал мне это:
libc++abi.dylib: terminating with uncaught exception of type sqlite3pp::database_error: UNIQUE constraint failed: Groups.Name
Но я не уверен, какой тип исключения я должен использовать, чтобы поймать? Я попытался
try {
cmd.execute();
} catch (std::exception& ex) {}
или
try {
cmd.execute();
} catch (sqlite3pp::database_error& ex) {}
или
try {
cmd.execute();
} catch (...) {}
Но ни один из них не работает. Может ли кто-нибудь помочь мне здесь? Благодаря!
Вот мой код:
#include <iostream>
#include "sqlite3pp.h"
int main(int argc, const char * argv[]) {
sqlite3pp::database db("./test.db");
// Create table
db.execute("CREATE TABLE IF NOT EXISTS Groups(" \
"Name TEXT PRIMARY KEY)");
sqlite3pp::command cmd(db, "INSERT INTO Groups (Name) VALUES (?)");
cmd.binder() << "Group_one";
try {
cmd.execute(); // When I run this code twice, the exception is thrown because of UNIQUE constraint.
} catch (std::exception& ex) {
std::cout << "exception: " << ex.what() << std::endl;
}
std::cout << "Done" << std::endl;
return 0;
}
Это тоже не работает. – wking