Warning, /sdk/codevis/thirdparty/soci/docs/errors.md is written in an unsupported language. File is not indexed.
0001 # Errors
0002
0003 All DB-related errors manifest themselves as exceptions of type `soci_error`, which is derived from `std::runtime_error`.
0004 This allows to handle database errors within the standard exception framework:
0005
0006 ```cpp
0007 int main()
0008 {
0009 try
0010 {
0011 // regular code
0012 }
0013 catch (std::exception const & e)
0014 {
0015 cerr << "Bang! " << e.what() << endl;
0016 }
0017 }
0018 ```
0019
0020 The `soci_error` class exposes two public functions:
0021
0022 The `get_error_message() const` function returns `std::string` with a brief error message, without any additional information that can be present in the full error message returned by `what()`.
0023
0024 The `get_error_category() const` function returns one of the `error_category` enumeration values, which allows the user to portably react to some subset of common errors.
0025 For example, `connection_error` or `constraint_violation` have meanings that are common across different database backends, even though the actual mechanics might differ.
0026
0027 ## Portability
0028
0029 Error categories are not universally supported and there is no claim that all possible errors that are reported by the database server are covered or interpreted.
0030 If the error category is not recognized by the backend, it defaults to `unknown`.
0031
0032 ## MySQL
0033
0034 The MySQL backend can throw instances of the `mysql_soci_error`, which is publicly derived from `soci_error` and has an additional public `err_num_` member containing the MySQL error code (as returned by `mysql_errno()`):
0035
0036 ```cpp
0037 int main()
0038 {
0039 try
0040 {
0041 // regular code
0042 }
0043 catch (soci::mysql_soci_error const & e)
0044 {
0045 cerr << "MySQL error: " << e.err_num_
0046 << " " << e.what() << endl;
0047 }
0048 catch (soci::exception const & e)
0049 {
0050 cerr << "Some other error: " << e.what() << endl;
0051 }
0052 }
0053 ```
0054
0055 ## Oracle
0056
0057 The Oracle backend can also throw the instances of the `oracle_soci_error`, which is publicly derived from `soci_error` and has an additional public `err_num_` member containing the Oracle error code:
0058
0059 ```cpp
0060 int main()
0061 {
0062 try
0063 {
0064 // regular code
0065 }
0066 catch (soci::oracle_soci_error const & e)
0067 {
0068 cerr << "Oracle error: " << e.err_num_
0069 << " " << e.what() << endl;
0070 }
0071 catch (soci::exception const & e)
0072 {
0073 cerr << "Some other error: " << e.what() << endl;
0074 }
0075 }
0076 ```
0077
0078 ## PostgreSQL
0079
0080 The PostgreSQL backend can also throw the instances of the `postgresql_soci_error`, which is publicly derived from `soci_error` and has an additional public `sqlstate()` member function returning the five-character "SQLSTATE" error code:
0081
0082 ```cpp
0083 int main()
0084 {
0085 try
0086 {
0087 // regular code
0088 }
0089 catch (soci::postgresql_soci_error const & e)
0090 {
0091 cerr << "PostgreSQL error: " << e.sqlstate()
0092 << " " << e.what() << endl;
0093 }
0094 catch (soci::exception const & e)
0095 {
0096 cerr << "Some other error: " << e.what() << endl;
0097 }
0098 }
0099 ```