Article View: pl.comp.lang.c
Article #308978Wznawianie zapisu do bazy po wyjątku do skutku
From: Borneq
Date: Sun, 15 Jan 2017 14:25
Date: Sun, 15 Jan 2017 14:25
35 lines
1918 bytes
1918 bytes
...lub przez max ilość prób w pętli.
Otóż,
Mam klasę dostępu do bazy MySQL.
Jest tam metoda:
void MySqlDB::execute(string statement)
{
sql::SQLString sql_statement(statement.c_str());
try {
stmt->execute(sql_statement);
}
catch (sql::SQLException &e) {
if (e.getErrorCode() != 1062) //duplicate entry
{
PRINTF ("# ERR: SQLException in %s"
"(%s) on line %d\n"
"# ERR: %s"
" (MySQL error code: %d"
", SQLState: %s )\n"
"%s \n"
, __FILE__, __FUNCTION__, __LINE__, e.what(), e.getErrorCode(),
e.getSQLState(), statement.c_str());
auto code = e.getErrorCode();
if(code == MySqlError::DEADLOCK_ERR || code == MySqlError::LOCKWAIT_ERR)
{
PRINTF("Retry transaction\n");
execute(statement);
}
}
}
}
Tutaj w przypadku błędów DEADLOCK_ERR czy LOCKWAIT_ERR spróbuje drugi
raz, ale drugi raz już bez try-catch.
Jakiej składni użyć by móc to robić w pętli dowolną liczbę razy
ograniczoną np. przez maxTrials=10 ?
Technical Details
Message-ID:
<o5g0nv$5kb$1@node2.news.atman.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mailShow Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail From: Borneq <borneq@antyspam.hidden.pl> Newsgroups: pl.comp.lang.c Subject: Wznawianie zapisu do bazy po wyjątku do skutku Date: Sun, 15 Jan 2017 15:25:07 +0100 Organization: ATMAN - ATM S.A. Lines: 35 Message-ID: <o5g0nv$5kb$1@node2.news.atman.pl> NNTP-Posting-Host: 91.239.205.105 Mime-Version: 1.0 X-Trace: node2.news.atman.pl 1484490303 5771 91.239.205.105 (15 Jan 2017 14:25:03 GMT) X-Complaints-To: usenet@atman.pl NNTP-Posting-Date: Sun, 15 Jan 2017 14:25:03 +0000 (UTC) User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.6.0 X-Mozilla-News-Host: news://news.atman.pl:119 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit