Как мне преобразовать из sql десятичного типа в удвоение БЕЗ приведения базовой базы с запросом, как это ответ предлагает. Я нахожусь на MySQL и приведение от десятичной (20,8) к ошибкам реальных причин. Я использую MySQL-коннектор C ++, и он прекрасно загружает и запускает очереди, но я не могу преобразовать данные из формата MySQL-коннектора в C ++.
Я использую MySQL 5.1.63, размещенную на Linux, а также запускаю код c ++ с другой машины Linux.
У меня нет опыта использования стандартного драйвера C ++ для MySQL (MySQL Connector / C ++). Тем не менее, я использовал драйвер MySQL ++.
Документация для MySQL Connector / C ++ довольно отсутствует. Тем не менее, похоже, что он пытается придерживаться JDBC API.
Вы можете просмотреть документация для JDBC на сайте Oracle.
Я предполагаю, что преобразовать значение в удвоение довольно просто:
sql::Connection* con;
//connection code, etc.
sql::Statement* stmt = con->createStatement();
sql::ResultSet* res = stmt->executeQuery("SELECT big_dec FROM test");
vector<double> results;
while (res->next())
{
//Allow the driver to convert it to double for you.
double res_double = res->getDouble("big_dec");
// You can use either numeric offsets...
cout << "num: " << res_double << endl;
results.push_back(res_double);
}
Редактировать:
Теперь вы говорите double
конвертируется правильно, но не вставляется в ваш vector<double>
должным образом.
Попробуйте следующее НЕПОСРЕДСТВЕННО после цикла:
for (vector<double>::iterator it = results.begin(); it != results.end(); it++)
{
cout << *it << endl;
}
Редактировать:
for
цикл печатает все успешно. Итак, мы знаем, что двойники добавляются к vector<double>
правильно.
Похоже, вы пытаетесь скопировать свой vector<double>
где-то, но не делают это должным образом.
Вы возвращаете это из функции?
Редактировать:
Проблема сейчас решена. vector
проблема была в другом месте.
Других решений пока нет …