Практическо използване на MySQL Част 2
Серия съдържание:
Това съдържание е част # от поредица # статии: Практическо използване на MySQL++
Това съдържание е част от поредицата: Практическо използване на MySQL++
Очаквайте нови статии от тази серия.
Преди да пристъпим към директното практическо приложение на библиотеката MySQL++, ще разгледаме въпросите за нейната конфигурация и настройки, както и някои проблеми, които могат да възникнат в процеса на подготовка на библиотеката за работа.
1. Конфигуриране на MySQL++
Конфигурацията на MySQL++ по подразбиране изглежда подходяща за повечето задачи. Въпреки това, в някои случаи конфигурационните параметри трябва да бъдат променени, за да отговарят на някои специфични условия.
1.1. Намиране на местоположенията на MySQL библиотечните файлове
Както беше отбелязано по-рано, библиотеката MySQL++ е базирана на MySQL C API, т.е. за всички операции на взаимодействие със сървъра на базата данни се използват функциите на библиотеките от по-ниско ниво. Следователно, ако заглавните файлове и C библиотечните файлове на API се намират в "нестандартни" местоположения и не могат да бъдат намерени по време на процеса на компилация на приложение, което използва MySQL++ библиотеката, компилацията ще бъде неуспешна.
На платформи, използващи Autoconf (почти всички Unix-базирани системи, които имат обвивка), скриптът за конфигуриране има способността да локализира необходимите API C файлове чрез просто повторение през стандартните и изрични инсталационни директории, докато намери това, от което се нуждае. Ако вашата система има MySQL сървъре инсталиран на нестандартно място, ще трябва да направите промени в скрипта за конфигуриране, за да му кажете къде да търси необходимите файлове. Това се прави с комбинация от флаговете --with-mysql, --with-mysql-include и --with-mysql-lib.
1.2. Максимален брой обработени колони на таблицата
Библиотеката MySQL++ предлага два начина за автоматично изграждане на SQL заявки по време на изпълнение: шаблонни заявки и специализирани SQL структури. Но тук трябва да се отбележи, че има ограничение за броя на параметрите в шаблона на заявката и за броя на полетата в структурата на SSQLS. И в първия, и във втория случай максималната стойност по подразбиране е 25. Авторите на библиотеката обясняват, че тази стойност е зададена експериментално, чрез тестване на различни платформи и използване на различни компилатори. Освен това не на последно място беше взето предвид „изискването за правилно проектиране на таблиците на базата данни“.
Ако въпреки това се случи таблицата да съдържа повече от 25 колони или трябва да посочите повече от 25 параметъра в шаблона на заявката и сте сигурни, че структурите на таблиците на вашата база данни са правилни, тогава е възможно да увеличите съответните гранични стойности. За да направите това, трябва да генерирате отново заглавните файлове lib/ssqls.h и lib/querydef.h, като използвате съответно Perl скриптове, наречени ssqls.pl и querydef.pl. Инструкциите за извършване на тези операции са дадени в заглавката на всеки скрипт. Разбира се, трябва да имате инсталиран интерпретатор на Perl на вашата система.
След като направите всички промени, се изпълнява командата make, която ви позволява да възстановите цялата библиотека.
1.3. „Скрити“ заглавни файлове MySQL C API-интерфейс
Обикновено при Unix-подобни системи заглавните файлове на MySQL C API се намират в поддиректорията mysql под стандартната директория /usr/include, т.е. нещо като "погребан" на по-ниско ниво от директорията на главния хедър. По-рано беше отбелязано, че заглавните файлове на MySQL++ зависят от заглавните файлове на MySQL C API, така че приложението MySQL++ трябва да бъде уведомено за "факта на скриване".
Когато дадено приложение включва един от заглавните файлове на MySQL C API, то го прави по обичайния начин:
Но ако дефинирате макроса MYSQLPP_MYSQL_HEADERS_BURIED, тогава директивата за включване ще изглежда така:
2. Разрешаване на проблеми с конфигурацията на библиотеката
Докато използвате MySQL++, може да има други проблеми, свързани с настройките и други характеристики на библиотеката.
2.1. Ако компилаторът не е напълно съвместим с C99,
MySQL++ използва разширения C99 заглавен файл stdint.h. Но някои C++ компилатори не осигуряват поддръжка за тази заглавка. В такива случаи опитите за компилиране на проекта ще доведат до грешки. За да поправите този вид грешка, трябва да дефинирате макроса MYSQLPP_NO_STDINT_H, който ще позволи на MySQL++ да избере най-подходящите цели числа (integer) вместо тези, които трябва да са дефинирани в заглавния файл stdint.h.
Освен това MySQL++ използва дефинирания от C99 тип данни long long винаги, когато е подходящо и оправдано да се използва този тип. Но на някои платформи и за някои компилатори този тип данни не е наличен. В резултат - отново грешка при компилация "неизвестен тип данни". Ситуацията може да бъде коригирана чрез дефиниране на макроса MYSQLPP_NO_LONG_LONG итогава MySQL++ ще се върне към използването на преносими типове данни.
2.2. Поддръжка на Unicode кодировки
На всички Linux и unix системи, които поддържат UTF-8 Unicode кодиране като кодиране по подразбиране в системата, няма проблеми с конзолния I/O. Ако системата изобщо не поддържа UTF-8, тогава ще трябва да конвертирате Unicode данните в локалното 8-битово кодиране. Това е мястото, където функцията на стандартната библиотека iconv() може да помогне.
Друг инструмент, който може да реши този проблем, е ICU на IBM. ICU е широко използван набор от библиотеки за C/C++, който осигурява пълна поддръжка за Unicode и подходяща локализация (интернационализация) на приложенията. Една от основните характеристики на ICU е преобразуването на кодова страница, което преобразува текстови данни между Unicode и практически всяко друго кодиране. Таблиците за преобразуване на ICU се основават на набори от символи, с които IBM е работила през годините и следователно са най-изчерпателната колекция от налични набори от символи. ICU е софтуерен продукт с отворен код и може да се използва свободно както в търговски проекти, така и в други разработки с отворен код.
3. Подготовка на проект в Linux среда
След обобщено описание на проблемите с конфигурацията и как да ги коригирате, е време да разберете какво точно трябва да се направи, за да използвате библиотеката MySQL ++ във вашите проекти.
Първо, във всички модули, които имат достъп до библиотеката MySQL ++, трябва да въведете директивата
Освен това, ако в модула се използват специализирани SSQLS структури, тогава е необходима още една директива:
В Unix системи можете да компилирате и свързвате програми по различни начини. Тук ще разгледаме"класическа" техника с помощта на makefile. Като пример е взет изключително прост изходен код; на този етап е важно да разберете принципа на взаимодействие с MySQL ++ и процедурата за изграждане на програма и да не се увличате с трикове и украшения.
Ето как би изглеждал световноизвестният тест "Hello, world" при използване на библиотеката MySQL++:
Да приемем, че изходният код по-горе е записан във файл, наречен hello.cpp. Тогава Makefile за компилиране и създаване на изпълнима програма може да бъде така:
Третият ред се нуждае от малко пояснение. Свързването на MySQL++ програми изисква както файл с библиотека mysqlpp, така и файл с библиотека mysqlclient. Вече разбрахме причината за това в началото на статията. В някои системи редът на присвояване на променливата LDFLAGS е важен: в този случай линкерът започва да чете отдясно наляво, така че най-дясната библиотека на реда трябва да е най-общата (най-„независимата“). В нашия случай MySQL++ библиотеката зависи от SQL C API библиотеката, така че C библиотеката е посочена последна на реда.
Може да се наложи да добавите други библиотеки в низа за присвояване на LDFLAGS. Това зависи от конкретната използвана система.
Даденият пример за makefile може да изглежда твърде лаконичен: източниците, зависимостите и правилата за създаване на изпълним файл не са изрично посочени. Факт е, че в такива ситуации стандартните правила, дефинирани по подразбиране, трябва да бъдат правилно обработени, особено ако използвате GNU make.
4. Заключение
Както можете да видите сами, след като прочетете тази статия, инсталирането, конфигурирането и практическото използване на библиотеката MySQL ++ не са свързани със сериозни трудности. Проблемите, описани в статията, не са толкова чести и са достатъчно елиминираниПросто. И след инсталиране на "обикновения" пакет от хранилището на съответната дистрибуция на Linux, библиотеката веднага е готова за използване. Поне това твърдение е тествано на практика за Fedora и Debian/Ubuntu.
Тази статия обхваща настройката и адаптирането на библиотеката MySQL++ в различни проекти. Следващата статия ще опише подробно изпълнението на SQL заявки и обработката на техните резултати. Темата на четвъртата статия е обработката на грешки и използването на транзакции. В петата статия ще разгледаме различни видове данни и ще работим с тях. Специализираните формуляри за заявки са отделени специално внимание в шести член. В последната, седма статия от поредицата ще бъде демонстрирано практическото използване на библиотеката MySQL ++ в многонишкови приложения.