| 1 | #include <iostream> | 
|---|
| 2 | #include <mysqlxx/mysqlxx.h> | 
|---|
| 3 |  | 
|---|
| 4 |  | 
|---|
| 5 | int main(int, char **) | 
|---|
| 6 | { | 
|---|
| 7 | try | 
|---|
| 8 | { | 
|---|
| 9 | mysqlxx::Connection connection( "test", "127.0.0.1", "root", "qwerty", 3306); | 
|---|
| 10 | std::cerr << "Connected."<< std::endl; | 
|---|
| 11 |  | 
|---|
| 12 | { | 
|---|
| 13 | mysqlxx::Query query = connection.query(); | 
|---|
| 14 | query << "SELECT 1 x, '2010-01-01 01:01:01' d"; | 
|---|
| 15 | mysqlxx::UseQueryResult result = query.use(); | 
|---|
| 16 | std::cerr << "use() called."<< std::endl; | 
|---|
| 17 |  | 
|---|
| 18 | while (mysqlxx::Row row = result.fetch()) | 
|---|
| 19 | { | 
|---|
| 20 | std::cerr << "Fetched row."<< std::endl; | 
|---|
| 21 | std::cerr << row[0] << ", "<< row[ "x"] << std::endl; | 
|---|
| 22 | std::cerr << row[1] << ", "<< row[ "d"] | 
|---|
| 23 | << ", "<< row[1].getDate() | 
|---|
| 24 | << ", "<< row[1].getDateTime() | 
|---|
| 25 | << ", "<< row[1].getDate() | 
|---|
| 26 | << ", "<< row[1].getDateTime() | 
|---|
| 27 | << std::endl | 
|---|
| 28 | << row[1].getDate() << ", "<< row[1].getDateTime() << std::endl | 
|---|
| 29 | << row[1].getDate() << ", "<< row[1].getDateTime() << std::endl | 
|---|
| 30 | << row[1].getDate() << ", "<< row[1].getDateTime() << std::endl | 
|---|
| 31 | << row[1].getDate() << ", "<< row[1].getDateTime() << std::endl | 
|---|
| 32 | ; | 
|---|
| 33 |  | 
|---|
| 34 | time_t t1 = row[0]; | 
|---|
| 35 | time_t t2 = row[1]; | 
|---|
| 36 | std::cerr << t1 << ", "<< LocalDateTime(t1) << std::endl; | 
|---|
| 37 | std::cerr << t2 << ", "<< LocalDateTime(t2) << std::endl; | 
|---|
| 38 | } | 
|---|
| 39 | } | 
|---|
| 40 |  | 
|---|
| 41 | { | 
|---|
| 42 | mysqlxx::Query query = connection.query(); | 
|---|
| 43 | query << "SELECT 1234567890 abc, 12345.67890 def UNION ALL SELECT 9876543210, 98765.43210"; | 
|---|
| 44 | mysqlxx::StoreQueryResult result = query.store(); | 
|---|
| 45 |  | 
|---|
| 46 | std::cerr << result.at(0)[ "abc"].getUInt() << ", "<< result.at(0)[ "def"].getDouble() << std::endl | 
|---|
| 47 | << result.at(1)[ "abc"].getUInt() << ", "<< result.at(1)[ "def"].getDouble() << std::endl; | 
|---|
| 48 | } | 
|---|
| 49 |  | 
|---|
| 50 | { | 
|---|
| 51 | mysqlxx::UseQueryResult result = connection.query( "SELECT 'abc\\\\def' x").use(); | 
|---|
| 52 | mysqlxx::Row row = result.fetch(); | 
|---|
| 53 | std::cerr << row << std::endl; | 
|---|
| 54 | std::cerr << row << std::endl; | 
|---|
| 55 | } | 
|---|
| 56 |  | 
|---|
| 57 | { | 
|---|
| 58 | mysqlxx::Query query = connection.query( "SEL"); | 
|---|
| 59 | query << "ECT 1"; | 
|---|
| 60 |  | 
|---|
| 61 | std::cerr << query.store().at(0).at(0) << std::endl; | 
|---|
| 62 | } | 
|---|
| 63 |  | 
|---|
| 64 | { | 
|---|
| 65 | /// Копирование Query | 
|---|
| 66 | mysqlxx::Query query = connection.query( "SELECT 'Ok' x"); | 
|---|
| 67 | using Queries = std::vector<mysqlxx::Query>; | 
|---|
| 68 | Queries queries; | 
|---|
| 69 | queries.push_back(query); | 
|---|
| 70 |  | 
|---|
| 71 | for (Queries::iterator it = queries.begin(); it != queries.end(); ++it) | 
|---|
| 72 | { | 
|---|
| 73 | std::cerr << it->str() << std::endl; | 
|---|
| 74 | std::cerr << it->store().at(0) << std::endl; | 
|---|
| 75 | } | 
|---|
| 76 | } | 
|---|
| 77 |  | 
|---|
| 78 | { | 
|---|
| 79 | /// Копирование Query | 
|---|
| 80 | mysqlxx::Query query1 = connection.query( "SELECT"); | 
|---|
| 81 | mysqlxx::Query query2 = query1; | 
|---|
| 82 | query2 << " 1"; | 
|---|
| 83 |  | 
|---|
| 84 | std::cerr << query1.str() << ", "<< query2.str() << std::endl; | 
|---|
| 85 | } | 
|---|
| 86 |  | 
|---|
| 87 | { | 
|---|
| 88 | /// Копирование Query | 
|---|
| 89 | using Queries = std::list<mysqlxx::Query>; | 
|---|
| 90 | Queries queries; | 
|---|
| 91 | queries.push_back(connection.query( "SELECT")); | 
|---|
| 92 | mysqlxx::Query & qref = queries.back(); | 
|---|
| 93 | qref << " 1"; | 
|---|
| 94 |  | 
|---|
| 95 | for (Queries::iterator it = queries.begin(); it != queries.end(); ++it) | 
|---|
| 96 | { | 
|---|
| 97 | std::cerr << it->str() << std::endl; | 
|---|
| 98 | std::cerr << it->store().at(0) << std::endl; | 
|---|
| 99 | } | 
|---|
| 100 | } | 
|---|
| 101 |  | 
|---|
| 102 | { | 
|---|
| 103 | /// Транзакции | 
|---|
| 104 | connection.query( "DROP TABLE IF EXISTS tmp").execute(); | 
|---|
| 105 | connection.query( "CREATE TABLE tmp (x INT, PRIMARY KEY (x)) ENGINE = InnoDB").execute(); | 
|---|
| 106 |  | 
|---|
| 107 | mysqlxx::Transaction trans(connection); | 
|---|
| 108 | connection.query( "INSERT INTO tmp VALUES (1)").execute(); | 
|---|
| 109 |  | 
|---|
| 110 | std::cerr << connection.query( "SELECT * FROM tmp").store().size() << std::endl; | 
|---|
| 111 |  | 
|---|
| 112 | trans.rollback(); | 
|---|
| 113 |  | 
|---|
| 114 | std::cerr << connection.query( "SELECT * FROM tmp").store().size() << std::endl; | 
|---|
| 115 | } | 
|---|
| 116 |  | 
|---|
| 117 | { | 
|---|
| 118 | /// Транзакции | 
|---|
| 119 | connection.query( "DROP TABLE IF EXISTS tmp").execute(); | 
|---|
| 120 | connection.query( "CREATE TABLE tmp (x INT, PRIMARY KEY (x)) ENGINE = InnoDB").execute(); | 
|---|
| 121 |  | 
|---|
| 122 | { | 
|---|
| 123 | mysqlxx::Transaction trans(connection); | 
|---|
| 124 | connection.query( "INSERT INTO tmp VALUES (1)").execute(); | 
|---|
| 125 | std::cerr << connection.query( "SELECT * FROM tmp").store().size() << std::endl; | 
|---|
| 126 | } | 
|---|
| 127 |  | 
|---|
| 128 | std::cerr << connection.query( "SELECT * FROM tmp").store().size() << std::endl; | 
|---|
| 129 | } | 
|---|
| 130 |  | 
|---|
| 131 | { | 
|---|
| 132 | /// Транзакции | 
|---|
| 133 | mysqlxx::Connection connection2( "test", "127.0.0.1", "root", "qwerty", 3306); | 
|---|
| 134 | connection2.query( "DROP TABLE IF EXISTS tmp").execute(); | 
|---|
| 135 | connection2.query( "CREATE TABLE tmp (x INT, PRIMARY KEY (x)) ENGINE = InnoDB").execute(); | 
|---|
| 136 |  | 
|---|
| 137 | mysqlxx::Transaction trans(connection2); | 
|---|
| 138 | connection2.query( "INSERT INTO tmp VALUES (1)").execute(); | 
|---|
| 139 | std::cerr << connection2.query( "SELECT * FROM tmp").store().size() << std::endl; | 
|---|
| 140 | } | 
|---|
| 141 | std::cerr << connection.query( "SELECT * FROM tmp").store().size() << std::endl; | 
|---|
| 142 |  | 
|---|
| 143 | { | 
|---|
| 144 | /// NULL | 
|---|
| 145 | mysqlxx::Null<int> x = mysqlxx::null; | 
|---|
| 146 | std::cerr << (x == mysqlxx::null ? "Ok": "Fail") << std::endl; | 
|---|
| 147 | std::cerr << (x == 0 ? "Fail": "Ok") << std::endl; | 
|---|
| 148 | std::cerr << (x.isNull() ? "Ok": "Fail") << std::endl; | 
|---|
| 149 | x = 1; | 
|---|
| 150 | std::cerr << (x == mysqlxx::null ? "Fail": "Ok") << std::endl; | 
|---|
| 151 | std::cerr << (x == 0 ? "Fail": "Ok") << std::endl; | 
|---|
| 152 | std::cerr << (x == 1 ? "Ok": "Fail") << std::endl; | 
|---|
| 153 | std::cerr << (x.isNull() ? "Fail": "Ok") << std::endl; | 
|---|
| 154 | } | 
|---|
| 155 |  | 
|---|
| 156 | { | 
|---|
| 157 | /// Исключения при попытке достать значение не того типа | 
|---|
| 158 | try | 
|---|
| 159 | { | 
|---|
| 160 | connection.query( "SELECT -1").store().at(0).at(0).getUInt(); | 
|---|
| 161 | std::cerr << "Fail"<< std::endl; | 
|---|
| 162 | } | 
|---|
| 163 | catch (const mysqlxx::Exception & e) | 
|---|
| 164 | { | 
|---|
| 165 | std::cerr << "Ok, "<< e.message() << std::endl; | 
|---|
| 166 | } | 
|---|
| 167 |  | 
|---|
| 168 | try | 
|---|
| 169 | { | 
|---|
| 170 | connection.query( "SELECT 'xxx'").store().at(0).at(0).getInt(); | 
|---|
| 171 | std::cerr << "Fail"<< std::endl; | 
|---|
| 172 | } | 
|---|
| 173 | catch (const mysqlxx::Exception & e) | 
|---|
| 174 | { | 
|---|
| 175 | std::cerr << "Ok, "<< e.message() << std::endl; | 
|---|
| 176 | } | 
|---|
| 177 |  | 
|---|
| 178 | try | 
|---|
| 179 | { | 
|---|
| 180 | connection.query( "SELECT NULL").store().at(0).at(0).getString(); | 
|---|
| 181 | std::cerr << "Fail"<< std::endl; | 
|---|
| 182 | } | 
|---|
| 183 | catch (const mysqlxx::Exception & e) | 
|---|
| 184 | { | 
|---|
| 185 | std::cerr << "Ok, "<< e.message() << std::endl; | 
|---|
| 186 | } | 
|---|
| 187 |  | 
|---|
| 188 | try | 
|---|
| 189 | { | 
|---|
| 190 | connection.query( "SELECT 123").store().at(0).at(0).getDate(); | 
|---|
| 191 | std::cerr << "Fail"<< std::endl; | 
|---|
| 192 | } | 
|---|
| 193 | catch (const mysqlxx::Exception & e) | 
|---|
| 194 | { | 
|---|
| 195 | std::cerr << "Ok, "<< e.message() << std::endl; | 
|---|
| 196 | } | 
|---|
| 197 |  | 
|---|
| 198 | try | 
|---|
| 199 | { | 
|---|
| 200 | connection.query( "SELECT '2011-01-01'").store().at(0).at(0).getDateTime(); | 
|---|
| 201 | std::cerr << "Fail"<< std::endl; | 
|---|
| 202 | } | 
|---|
| 203 | catch (const mysqlxx::Exception & e) | 
|---|
| 204 | { | 
|---|
| 205 | std::cerr << "Ok, "<< e.message() << std::endl; | 
|---|
| 206 | } | 
|---|
| 207 | } | 
|---|
| 208 | } | 
|---|
| 209 | catch (const mysqlxx::Exception & e) | 
|---|
| 210 | { | 
|---|
| 211 | std::cerr << e.code() << ", "<< e.message() << std::endl; | 
|---|
| 212 | throw; | 
|---|
| 213 | } | 
|---|
| 214 |  | 
|---|
| 215 | return 0; | 
|---|
| 216 | } | 
|---|
| 217 |  | 
|---|