C ++ с соединителем sql, получающим метаданные без большого количества данных - PullRequest
0 голосов
/ 17 января 2019

Я только начал работать с SQL-коннектором в C ++ (и SQL). Мне нужно написать кучу заголовочных файлов из объектов из базы данных. (MariaDB, но было бы здорово, если бы он работал на всех sql dbs) Мое решение до сих пор получает имена таблиц с

res = stmt->executeQuery("SHOW TABLES from " + dbname);

где dbname - строка, введенная пользователем. Я храню данные для последующего использования в векторе, называемом именами таблиц, и использую их следующим образом:

   for(std::string table :tablenames){
    delete stmt; //freeing memory and attach new information to it
    delete res;
    std::string query;
    query = "SELECT * from " + table + ";";
    stmt = con->createStatement();
    res = stmt ->executeQuery(query);
    std::cout << query << "\n";
    //using metadata for getting information or passing it to another method
}

Это не готово, но будет работать, но я беру из базы данных гораздо больше информации, чем мне нужно. Я хотел бы взять только 1 строку из базы данных (или, может быть, только табличную информацию) и получить доступ к метаданным для получения информации (такой как columnlabel, columntypename и, возможно, displaysize), которая мне нужна для файла заголовка. Поэтому моя проблема в том, что я генерирую много трафика с помощью своего решения, особенно если я запускаю его для больших баз данных. Я нашел несколько решений, которые использовали что-то вроде WHERE id = 1 но я не могу гарантировать, что в таблице есть идентификатор (или что-то еще). Надеюсь, вы поможете мне найти лучшее решение.

1 Ответ

0 голосов
/ 17 января 2019

Используйте ключевое слово limit. «выбрать * из таблицы LIMIT 1» Это будет делать, как говорится, и ограничит результат только одним.

...