LINUX.ORG.RU

C++ && MySQL


0

2

Батеньки, кто поможет? Нужно подружить сисечки плюс-плюс с mysql... Через mysql.com вылез на mysql_connector и при попытке поставить сломал компилятор %)

У кого опыт есть?(


Ответ на: комментарий от visual

#include <mysql.h>

не стандартная библиотека, валялась в сорцах mysql-server старых, сейчас нету. По факту как мой вариант с mysql_connector, та же пятая точка только в анфас...

А про QT4 поподробнее можно, не работал с ним

ZekMan
() автор топика

а обязательно плюсовое?

find /usr/include/ -name "mysql.h"
/usr/include/mysql/mysql.h
Всё на месте. Чем стандартный API не нравится?

Chaser_Andrey ★★★★★
()
Ответ на: комментарий от ZekMan

db = QsqlDatabase::addDatabase(«QMYSQL»);

Далее см классы из QtSql

visual ★★★
()

Поехали. mysql.h все еще есть в инсталляке мускула (я ставил версию 5.1 с сайта mysql.ru, в 5.5 тоже должно быть) надо только выбрать установку детальную и там понаставить галочек внимательно вчитываясь в их значение. Будет все это лежать в папке куда установился мускул. Я сейчас говорю про оффтопик, вероятно если поискать пакет mysql-dev под линукс то там будет этот файлец.

Qt - под оффтопиком процесс сборки mysql драйвера ниразу не тривиальная задача. Я этот пакет собирал каждый раз при выходе новой Qt-ы начиная с версии 4.5.чето-то там. Каждый раз меня приятно удивляла «легкость» с которой я это делал. И изобретательность моих матов. хотя в конечном итоге все сводилось к перекидыванию хедеров в директорию с исходником драйвера.

Но если вы вдруг соберете драйвер под Qt то для вас персонально наступит братство равенство и упячка. Подключение к базе тривиальное, работа с базой обалденная. Запросики писать опятьже удобно.

Производительность относительно неплохая (бенчмарков не делал но по субъективным ощущениям мою задачу жует хорошо).

В общем если решишся окунуться в чудесный мир Qt то пиши чем смогу помогу.

iTroll
()

Гугли про libmysqlclient, это ж официальное API.

anonymous
()

Использовал в этих целях mysqlpp. Но это не единственный и, возможно, не лучший биндинг.

Через mysql.com вылез на mysql_connector и при попытке поставить сломал компилятор %)

Как же ты его так ставил?

Deleted
()
Ответ на: комментарий от visual

2. Речь о C++, а не C, и наверное ТС хочет плюсовые биндинги таки.

Deleted
()
Ответ на: комментарий от ZekMan

не стандартная библиотека, валялась в сорцах mysql-server старых, сейчас нету.

Есть она в поставке MySQL. В debina-based дистрибутивах это пакет libmysqlclient-dev

Deleted
()

mysqlpp живой, но не без багов. В дебиане ставится из репозитория, но потом приходится дополнительно ковыряться с хедерами.

anonymous
()
Ответ на: комментарий от anonymous

Никогда не ковырялся, все просто работало.

Deleted
()
Ответ на: комментарий от ZekMan

Используй Qt. В следующем примере отсутствуют некоторые детали, но принцип думаю понятен:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", connectionName);

db.setHostName("hostname");
db.setPort(port);
db.setUserName("user name");
db.setPassword("password");
db.setDatabaseName("databaseName");

if(!db.open()) {
	qDebug(qPrintable(db.lastError().text()));
	return;
}
       
QString query = QString("SELECT * FROM table WHERE id = '%1'").arg(id);
QSqlQuery sqlQuery(connectionName);
if(sqlQuery.exec(query)) {
	while(sqlQuery.next()) {
		int idCol = sqlQuery.record().indexOf("id");
		qDebug() << sqlQuery.value(idCol).toInt();
	}
}

db = QSqlDatabase();
db.close();
db.removeDatabase(connectionName);

m0rph ★★★★★
()
Ответ на: комментарий от m0rph

db.setHostName(«hostname»); db.setPort(port); db.setUserName(«user name»); db.setPassword(«password»); db.setDatabaseName(«databaseName»);

Ох, ну и ужас этот c++. А можно сделать как-нибудь так:

db.connect(host="hostname", port=3125, username="adolf", password="god");

// Наезд на c++, а не на вас ;)

anonymous
()
Ответ на: комментарий от anonymous

А можно сделать как-нибудь так:

это вопрос, а не утверждение. ох, сессия ;)

anonymous
()
Ответ на: комментарий от anonymous

В данный момент у QSqlDatabase есть только два варианта функции open:

bool open()
bool open(const QString& user, const QString& password)
Т.е. хост и порт задавать придется отдельно.

m0rph ★★★★★
()
Ответ на: комментарий от anonymous

Мы конечно программисты, но не на столько же ленивые.

QSqlDatabase myConnect(QString host,int port, QString username, QString pass, QString dbname){
  QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", connectionName);
  db.setHostName(host); db.setPort(port);   
  db.setUserName(username); db.setPassword(pass); 
  db.setDatabaseName(dbname);
  if(!db.open(){ 
        qDebug(qPrintable(db.lastError().text())); return NULL; 
  } 
  return db; 
}

QSqlDatabase mydb = myConnect("127.0.0.1",3154,"Vasya","Popa");

iTroll
()
Ответ на: комментарий от iTroll

Забыл в примере передать имя базы данных :(

QSqlDatabase mydb = myConnect(«127.0.0.1»,3154,«Vasya»,«Popa»,«Secretnaya_Raketnaya_Baza_Dannih»);

iTroll
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.