SQL-tietokannan ajurit. SQL-komentojen suorittaminen Qt:ssä

Voit käyttää luokkaa SQL-komentojen suorittamiseen yhteyden muodostamisen jälkeen QSqlQuery. Pyynnöt (komennot) muotoillaan lomakkeella tavallinen merkkijono, joka välitetään rakentajalle tai menetelmälle QSqlQuery::exec(). Konstruktorin tapauksessa komento käynnistetään automaattisesti, kun objekti luodaan.

Luokka QSqlQuery tarjoaa navigointiominaisuudet. Esimerkiksi pyynnön suorittamisen jälkeen VALITSE voit selata kerättyjä tietoja menetelmillä Seuraava(), Edellinen(), ensimmäinen(), kestää() Ja etsiä(). Käyttämällä menetelmää Seuraava() siirrymme seuraava rivi tiedot ja menetelmäkutsu Edellinen() siirtää meidät edelliselle tietoriville. Käyttämällä menetelmiä ensimmäinen() Ja kestää() voi asettaa ensimmäisen ja viimeisen tietorivin vastaavasti. Menetelmä etsiä() asettaa datarivin parametrissaan määritettyyn kokonaislukuindeksiin. Datalinjojen lukumäärä saadaan kutsumalla menetelmää koko().

Pyynnön yhteydessä ilmenee lisäongelmia LISÄÄ. Asia on siinä, että sinun on upotettava tiedot pyyntöön. Tämän saavuttamiseksi voit käyttää kahta menetelmää: valmistella() Ja bindValue(). Menetelmässä valmistella() asetamme mallin, johon tiedot korvataan menetelmillä bindValue(). Esimerkiksi:

Query.prepare("LISÄÄ osoitekirjaan (numero, nimi, puhelinnumero, sähköpostiosoite) VALUES(:numero, :nimi, :puhelin, :sähköposti);"); query.bindValue(" :numero", "1"); query.bindValue(":nimi", "Possu"); query.bindValue(":puhelin", " + 49 631322187"); query.bindValue(":email", " [sähköposti suojattu]");

Voit myös käyttää vaihtoehtoa käyttää nimettömiä parametreja, jotka tunnetaan ODBC:stä:

Query.prepare("LISÄÄ osoitekirjaan (numero, nimi, puhelinnumero, sähköpostiosoite) VALUES(?, ?, ?, ?);"); query.bindValue("1"); query.bindValue("Possu"); query.bindValue("+ 49 631322187"); query.bindValue(" [sähköposti suojattu]");

Kolmantena vaihtoehtona voit käyttää luokkaa QString, erityisesti menetelmällä QString::arg(), jolla voit korvata tietoarvoja.

Int main(int argc, char** argv) ( QCoreApplication app(argc, argv); if (!createConnection()) ( return -1; ) //Tietokannan QSqlQuery-kyselyn luominen; QString str = "LUO TABLE osoitekirja (" "numero INTEGER PRIMARY KEY EI TYHJÄ, " "nimi VARCHAR(15), " "puhelin VARCHAR(12), " "sähköposti VARCHAR(15) " ");"; if (!query.exec(str)) ( qDebug()<< "Unable to create a table"; } //Adding some information QString strF = "INSERT INTO addressbook (number, name, phone, email) " "VALUES(%1, "%2", "%3", "%4");"; str = strF.arg("1") .arg("Piggy") .arg("+49 631322187") .arg("[sähköposti suojattu]"); if (!query.exec(str)) ( qDebug()<< "Unable to do insert opeation"; } str = strF.arg("2") .arg("Kermit") .arg("+49 631322181") .arg("[sähköposti suojattu]"); if (!query.exec(str)) ( qDebug()<< "Unable to do insert operation"; } if (!query.exec("SELECT * FROM addressbook;")) { qDebug() << "Unable to execute query - exiting"; return 1; } //Reading of the data QSqlRecord rec = query.record(); int nNumber = 0; QString strName; QString strPhone; QString strEmail; while (query.next()) { nNumber = query.value(rec.indexOf("number")).toInt(); strName = query.value(rec.indexOf("name")).toString(); strPhone = query.value(rec.indexOf("phone")).toString(); strEmail = query.value(rec.indexOf("email")).toString(); qDebug() << nNumber << " " << strName << ";\t" << strPhone << ";\t" << strEmail; } return 0; }

Yllä oleva ohjelma näyttää SQL-komentojen suorittamisen. Tietokanta luodaan, tiedot tallennetaan ja poltetaan. Tämän seurauksena seuraavat tiedot tulostetaan konsoliin:

1 "possu" ; "+49 631322187" ; " [sähköposti suojattu]" 2 "Kermit" ; "+49 631322181" ; " [sähköposti suojattu]"

Jos yhteys tietokantaan onnistuu käyttämällä luo yhteys() luo rivin, joka sisältää komennon SQL taulukon luomiseen. Tämä merkkijono välitetään menetelmälle exec() luokan objekti QSqlQuery. Jos taulukkoa ei voida luoda, konsoliin tulostetaan varoitusviesti. Johtuen siitä, että taulukkoon syötetään useampi kuin yksi rivi merkkijonomuuttujaan strF Määrittelysymbolit määrittelevät INSERT-komennon mallin. Menetelmä vaatii arg() luokka QString korvaa vaaditut arvot mallin avulla.

Sitten, kun tietokanta on luotu ja kaikki tiedot on syötetty taulukkoon, suoritetaan SELECT-kysely, joka sijoittaa taulukon rivit ja sarakkeet objektiin kysely. Taulukon arvot tulostetaan konsoliin silmukassa. Kun menetelmää kutsutaan ensimmäistä kertaa Seuraava() tämä objekti osoittaa taulukon ensimmäiselle riville. Seuraavat puhelut siirtävät osoittimen seuraaville riveille. Jos tietueita ei ole enempää, menetelmä Seuraava() palaa väärä, joka poistuu silmukasta. Saadaksesi pyynnön tuloksen, kutsu menetelmä QSqlQuery::arvo(), jossa sinun on välitettävä sarakkeen numero. Tätä varten käytämme menetelmää ennätys(). Tämä menetelmä palauttaa luokan objektin QSqlRecord, joka sisältää pyynnön kannalta merkitykselliset tiedot VALITSE. Sen avulla menetelmän kutsuminen QSqlRecord::sisällysluettelo(), saamme sarakkeen indeksin.

Menetelmä arvo() palauttaa tyypin arvot QVariant. QVariant on erikoisluokka, jonka objektit voivat sisältää erityyppisiä arvoja. Siksi esimerkissämme saatu arvo on muutettava vaadittuun tyyppiin käyttämällä menetelmiä QVariant::toInt() Ja QVariant::toString().

Alla olevassa taulukossa on luettelo Qt:n mukana toimitetuista ohjaimista. Lisenssien yhteensopimattomuuden vuoksi GPL:n kanssa kaikkia laajennuksia ei toimiteta Qt:n avoimen lähdekoodin versioilla.

Ohjaimen nimi DBMSIBM DB2 (versio 7.1 tai uudempi)Borland InterBaseMySQLOracle Call Interface -ohjainOpen Database Connectivity (ODBC) - Microsoft SQL Server ja muut ODBC-yhteensopivat tietokannatPostgreSQL (versio 7.3 ja uudemmat)SQLite versio 2SQLite versio 3Sybase Adaptive Server Huomautus: vanhentunut Qt 4.7:stä

SQLite on prosessin sisäinen tietokantajärjestelmä, jolla on paras testikattavuus ja tuki kaikilla alustoilla. Oracle OCI:n kautta sekä PostreSQL ja MySQL joko ODBC:n tai alkuperäisen ohjaimen kautta ovat hyvin testattuja Windowsissa ja Linuxissa. Muiden järjestelmien tuen täydellisyys riippuu asiakaskirjastojen saatavuudesta ja laadusta.

Kommentti: Jotta voit rakentaa ohjainlaajennuksen, sinulla on oltava asianmukainen asiakaskirjasto tietokannan hallintajärjestelmääsi (DBMS) varten. Tämä tarjoaa pääsyn DBMS-sovellusliittymään, ja se toimitetaan yleensä sen mukana. Useimmat asentajat sallivat myös "kehityskirjastojen" asentamisen, tätä tarvitset. Nämä kirjastot ovat vastuussa matalan tason vuorovaikutuksesta DBMS:n kanssa.

Rakenna ajurit, kun suoritat konfigurointia

Unix- ja Mac OS X -käyttöjärjestelmissä Qt-määrityskomentosarja yrittää automaattisesti tunnistaa koneellasi käytettävissä olevat kirjastot. Suorittamalla configure -help näet, mitkä ajurit voidaan rakentaa. Saat seuraavan kaltaisen luettelon:

Ei-sql- ...Poista SQL käytöstä täysin. -qt-sql- ... Ota SQL käyttöön Qt-kirjastossa, ei ole oletuksena mukana. -plugin-sql- Ota SQL käyttöön liitännäisenä yhteyden muodostamista varten ohjelman suorittamisen aikana. Käytettävissä olevat arvot kohteelle : [ db2 ibase mysql oci odbc psql sqlite sqlite2 tds ]

Määrityskomentosarja ei pysty havaitsemaan vaadittuja kirjastoja ja sisällyttämään tiedostoja, jos ne eivät ole vakiohakemistoissa. Sinun on ehkä määritettävä niiden polku komentorivin -I- ja -L-valitsimilla. Jos esimerkiksi MySQL-sisällystystiedostot on asennettu kansioon /usr/local/mysql (tai Windowsissa C:\mysql\include), lisää seuraava parametri: -I/usr/local/mysql (tai -I C:\ mysql\include Windowsissa).

Windowsissa -I-vaihtoehto ei tue välilyöntejä polussa. Käytä tarvittaessa 8.3-nimiä; Käytä esimerkiksi C:\progra~1\mysql C:\Program Files\mysql sijasta.

Käytä vaihtoehtoa -qt-sql- ajuritietokannan staattiseen kokoamiseen Qt-kirjastolla tai -plugin-sql- rakentaa ohjain laajennuksena. Lisätietoja vaadituista kirjastoista on alla olevissa osioissa.

Laajennusten rakentaminen manuaalisesti

QMYSQL MySQL 4:lle ja uudemmalle

Tuki tallennetuille proseduureille QMYSQL:ssä

MySQL 5 esitteli tuen SQL-tason tallennetuille toimenpiteille, mutta ei API-ohjausta IN-, OUT- ja INOUT-parametreille. Siksi parametrit on asetettava ja luettava QSqlQuery::bindValue()-komennolla.

Esimerkki tallennetusta menettelystä:

Luo toimintosarja qtestproc (OUT param1 INT, OUT param2 INT) BEGIN set param1 = 42; aseta param2 = 43; LOPPU

Lähdekoodi OUT-arvoihin pääsemiseksi:

QSqlQuery q; q. exec( "soita qtestproc (@outval1, @outval2)"); q. exec("valitse @outval1, @outval2" ); q. Seuraava(); qDebug()< < q. value(0 ) < < q. value(1 ); // outputs "42" and "43"

Kommentti:@outval1 ja @outval2 ovat nykyisen yhteyden paikallisia muuttujia, ne eivät osallistu toisesta tietokoneesta tai yhteydestä lähetettyihin pyyntöihin.

Sisäänrakennettu MySQL-palvelin

Sisäänrakennettu MySQL-palvelin on helppo korvata tavallinen asiakaskirjasto. MySQL-toimintojen käyttämiseen sisäänrakennetun MySQL-palvelimen kanssa ei tarvita MySQL-palvelinta.

Jos haluat käyttää sisäänrakennettua MySQL-palvelinta, linkitä Qt-laajennus libmysqld:hen libmysqlclientin sijaan. Tämä voidaan tehdä korvaamalla alla olevan osan qmake-komennon -lmysqlclient_r -lmysqld.

Katso MySQL-dokumentaation luvusta "libmysqld, the Embedded MySQL Server Library" saadaksesi lisätietoja sulautetusta MySQL-palvelimesta.

QMYSQL-laajennuksen rakentaminen Unixille ja Mac OS X:lle

Tarvitset MySQL-otsikkotiedostot vastaavan libmysqlclient.so-dynaamisen kirjaston kanssa. Jakelustasi riippuen saatat joutua asentamaan paketin, jota yleensä kutsutaan nimellä "mysql-devel".

OCI BLOB/LOB -tuki

BLOB-lisäys on tehtävä joko valmiilla kyselyllä, jossa BLOB:t on rajoitettava mallilla, tai QSqlTableModel-mallilla, joka käyttää valmiita kyselyitä sisäisesti.

OCI-laajennuksen luominen Unixille ja Mac OS X:lle

Oracle 10g:lle tarvitset vain "Instant Client Package - Basic" ja "Instant Client Package - SDK". Oracle 10g asti tarvitset Oraclen vakioasiakas- ja SDK-paketit.

Ohjaimen rakentamiseen vaadittavat Oracle-kirjastot:

  • libclntsh.so (kaikki versiot)
  • libwtc9.so (vain Oracle 9)

Kerro qmakelle, mistä Oraclen otsikot ja kirjastot löytyvät, ja suorita sitten make:

Oracle-versio 9:

CD $QTDIR/src/plugins/sqldrivers/oci qmake "INCLUDEPATH+=$ORACLE_HOME/rdbms/public $ORACLE_HOME/rdbms/demo" "LIBS+=-L$ORACLE_HOME/lib -lclntsh -lwtc9" oci.

Oracle-versiossa 10 oletamme, että olet asentanut Instant Client Package SDK RPM:t (sinun on määritettävä oikea versionumero):

Cd $QTDIR/src/plugins/sqldrivers/oci qmake "INCLUDEPATH+=/usr/include/oracle/10.1.0.3/client/" "LIBS+=-L/usr/lib/oracle/10.1.0.3/client/lib -lclntsh "oci.pro make

Huomautus: Jos käytät Oracle Instant Client -pakettia, sinun on asetettava LD_LIBRARY_PATH, kun rakennat OCI SQL -laajennusta ja suoritat OCI SQL -laajennusta käyttävää sovellusta. Voit välttää tämän vaatimuksen asettamalla RPATH:n ja luetteloimalla kaikki linkitettävät kirjastot. Tässä on esimerkki:

Määritä -I /usr/include/oracle/10.1.0.3/client -L /usr/lib/oracle/10.1.0.3/client/lib -R /usr/lib/oracle/10.1.0.3/client/lib -lclntsh - lnnz10 merkki

Jos haluat rakentaa OCI-laajennuksen manuaalisesti tällä menetelmällä, menettely näyttää tältä:

Cd $QTDIR/src/plugins/sqldrivers/oci qmake "INCLUDEPATH+=/usr/include/oracle/10.1.0.3/client" "LIBS+=-L/usr/lib/oracle/10.1.0.3/client/lib -Wl, -rpath,/usr/lib/oracle/10.1.0.3/client/lib -lclntsh -lnnz10" oci.pro make

Kuinka luoda OCI-laajennus Windowsille

Valinta "Ohjelmoija" Oracle Client Installerissa Oracle Client Installation CD -levyltä riittää yleensä rakentamaan laajennuksen. Joissakin Oracle Client -versioissa saatat joutua myös valitsemaan "Call Interface (OCI)" -vaihtoehdon, jos se on saatavilla.

Rakenna laajennus seuraavasti (tässä oletetaan, että Oracle-asiakasohjelma on asennettu C:\oracleen):

Aseta INCLUDE=%INCLUDE%;c:\oracle\oci\include joukko LIB=%LIB%;c:\oracle\oci\lib\msvc cd %QTDIR%\src\plugins\sqldrivers\oci qmake oci.pro nmake

Kun suoritat sovelluksen, sinun on lisättävä oci.dll-tiedoston polku PATH-ympäristömuuttujaan:

Aseta PATH=%PATH%;c:\oracle\bin

Kommentti:

QODBC avoin tietokantayhteys (ODBC)

Yleistä tietoa ODBC-laajennuksesta

ODBC on yleinen käyttöliittymä, jonka avulla voit muodostaa yhteyden useisiin tietokantajärjestelmiin. QODBC-ohjaimen avulla voit muodostaa yhteyden "ODBC-tietolähteeseen" ja käyttää olemassa olevia tietolähteitä. Huomaa, että sinun on myös asennettava ja määritettävä ODBC-ohjaimet järjestelmääsi asennetulle "ODBC-tietolähteelle". QODBC-laajennus antaa sinun käyttää näitä tietolähteitä Qt-sovelluksissasi.

Kommentti: sinun tulee käyttää alkuperäisiä ohjaimia ODBC-ohjaimen sijaan, jos mahdollista. ODBC-tukea voidaan käyttää ratkaisuna tietokantoihin, jos alkuperäistä ohjainta ei ole saatavilla.

Windowsissa "ODBC Data Source" pitäisi olla asennettuna oletuksena. Unix-järjestelmissä on useita toteutuksia, jotka on asennettava ensin. Huomaa, että jokainen sovellusta käyttävä asiakas vaatii "ODBC-tietolähteen" asennettuna, muuten QODBC-laajennus ei toimi.

Muista, että kun muodostat yhteyden ODBC-tietoihin, sinun on syötettävä tietolähteen ODBC-nimi QSqlDatabase::setDatabaseName()-funktioon, ei tietokannan nimi.

QODBC-laajennus vaatii toimiakseen yhteensopivan ODBC-hallintaohjaimen version 2.0 tai uudemman. Joidenkin ODBC-ajurien versio on 2.0, mutta ne eivät tue vaadittuja toimintoja. QODBC-laajennus tarkistaa siksi, voidaanko tietolähdettä käyttää yhteyden muodostamisen jälkeen, ja kieltäytyy toimimasta, jos tarkistus epäonnistuu. Jos et pidä tästä käytöksestä, voit poistaa #define ODBC_CHECK_DRIVER -rivin tiedostosta qsql_odbc.cpp. Tee tämä omalla vastuullasi.

Oletusarvoisesti Qt käskee ODBC-ajuria toimimaan ODBC 2.x -ohjaimena. Joillekin kuitenkin driver-manager/ODBC 3.x-ohjain yhdistelmät (esim. unixODBC/MaxDB ODBC), ODBC-ohjaimen käskeminen toimia 2.x-ohjaimena voi aiheuttaa ohjainlaajennuksen odottamattoman toiminnan. Voit välttää tämän ongelman ohjeistamalla ODBC-ohjainta toimimaan 3.x-ohjaimena asettamalla yhteysasetukseksi "SQL_ATTR_ODBC_VERSION=SQL_OV_ODBC3", ennen kuin avaat tietokantayhteyden. Huomaa, että tämä vaikuttaa useisiin ODBC-ohjainten käyttäytymiseen liittyviin näkökohtiin, esimerkiksi SQLSTATE-tilaan. Ennen kuin asetat tämän yhteysasetuksen, tutustu ODBC-dokumentaatioon odotettavissa olevista käyttäytymiseroista.

Jos ODBC-tietolähteen käyttö on erittäin hidasta, varmista, että ODBC-kutsujen jäljitys on poistettu käytöstä ODBC-tietolähteen hallinnassa.

Jotkut ohjaimet eivät tue vieritettäviä kohdistimia. Siinä tapauksessa vain eteenpäin-tilassa olevia kyselyjä voidaan käyttää onnistuneesti.

Tuki tallennetuille toimenpiteille ODBC:ssä

Microsoft SQL Serverissä tulosjoukko, jonka palauttaa tallennettu toimintosarja, joka käyttää return-lausetta tai palauttaa useita tulosjoukkoja, on käytettävissä vain, jos asetat kyselyn vain eteenpäin -tilaksi eteenpäin käyttämällä QSqlQuery::setForwardOnly().

// STORED_PROC käyttää return-lausetta tai palauttaa useita tulosjoukkoja QSqlQuery kysely; kysely. setForwardOnly(true); kysely. exec("(soita STORED_PROC)" );

Huomautus: Tallennetun toimintosarjan return-lauseen palauttama arvo hylätään.

Unicode-tuki ODBC:ssä

QODBC-laajennus käyttää Unicode-sovellusliittymää, jos UNICODE on määritetty. Windows NT -pohjaisissa järjestelmissä tämä on oletusarvo. Huomaa, että ODBC-ohjaimen ja DBMS:n on myös tuettava Unicodea.

Jotkut ajurien hallintaohjelmat ja ajurit eivät tue UNICODEa. Jotta QODBC-laajennusta voidaan käyttää tällaisten ohjainten kanssa, se on käännettävä määritetyllä Q_ODBC_VERSION_2:lla.

Oracle 9 ODBC -ohjaimelle (Windows) on tarkistettava "SQL_WCHAR-tuki" ODBC-ohjainten hallinnassa, muuten Oracle muuntaa kaikki Unicode-merkkijonot paikallisiksi 8-bittisiksi.

ODBC-laajennuksen luominen Unixille ja Mac OS X:lle

On suositeltavaa käyttää unixODBC:tä. Löydät uusimman version ja ODBC-ajurit osoitteesta http://www.unixodbc.org. Tarvitset unixODBC-otsikkotiedostot ja jaetut kirjastot.

Kerro qmakelle, mistä löytää unixODBC-otsikkotiedostot ja jaetut kirjastot (tässä oletetaan, että unixODBC on asennettu kansioon /usr/local/unixODBC) ja suorita make:

Cd $QTDIR/src/plugins/sqldrivers/odbc qmake "INCLUDEPATH+=/usr/local/unixODBC/include" "LIBS+=-L/usr/local/unixODBC/lib -lodbc" make

Kuinka luoda ODBC-laajennus Windowsille

ODBC-otsikon ja sisällyttämistiedostojen pitäisi olla jo asennettuna oikeisiin hakemistoihin. Sinun tarvitsee vain rakentaa laajennus seuraavasti:

Cd %QTDIR%\src\plugins\sqldrivers\odbc qmake odbc.pro nmake

Jos käytät muuta kuin Microsoftin kääntäjää, korvaa nmake nimellä make .

Huomautus: Tätä tietokantalaajennusta ei tueta virallisesti Windows CE:lle.

QPSQL PostgreSQL:lle (versio 7.3 ja uudemmat)

Yleistä tietoa QPSQL-ohjaimesta

QPSQL-ohjain tukee PostgreSQL-palvelimen versiota 7.3 ja uudempia. Suosittelemme, että käytät asiakaskirjastoa versiosta 7.3.15, 7.4.13, 8.0.8, 8.1.4 tai uudempi, koska nämä versiot sisältävät tietoturvakorjauksia ja koska QPSQL-ajuria ei välttämättä rakenneta asiakaskirjaston vanhempien versioiden kanssa. alustastasi riippuen.

Unicode-tuki QPSQL:ssä

QPSQL-ohjain tunnistaa automaattisesti, tukeeko PostgreSQL-tietokanta Unicodea vai ei. Unicodea käytetään automaattisesti, jos palvelin tukee sitä. Huomaa, että ohjain tukee vain UTF-8-koodausta. Jos tietokanta käyttää jotain muuta koodausta, palvelimen on oltava käännetty Unicode-muunnostuella.

Unicode-tuki otettiin käyttöön PostgreSQL-versiossa 7.1 ja se toimii vain, jos sekä palvelin että asiakaskirjasto on käännetty monitavuisella tuella. Lisätietoja monitavuisen PostgreSQL-palvelimen määrittämisestä on PostgreSQL-järjestelmänvalvojan oppaan luvussa 5.

BLOB-tuki QPSQL:ssä

Binäärisiä suuria objekteja tuetaan BYTEA-kenttätyypin kautta PostgreSQL-palvelinversioissa >= 7.1.

Kuinka rakentaa QPSQL-laajennus Unixille ja Mac OS X:lle

Tarvitset PostgreSQL-asiakaskirjaston ja otsikot asennettuna.

Jotta qmake löytää PostgreSQL-otsikkotiedostot ja jaetut kirjastot, suorita qmake seuraavalla tavalla (olettaen, että PostgreSQL-asiakasohjelma on asennettu kansioon /usr):

Cd $QTDIR/src/plugins/sqldrivers/psql qmake "INCLUDEPATH+=/usr/include/pgsql" "LIBS+=-L/usr/lib -lpq" psql.pro make

Kommentti: Tätä tietokantalaajennusta ei tueta Windows CE:ssä.

QTDS Sybase Adaptive Serverille

Huomautus: MS Sql Server ei enää käytä TDS:ää, ja sen korvaa . QTDS on poistettu käytöstä Qt 4.7:n jälkeen.

Yleistä tietoa QTDS:stä

QDB2-laajennuksen rakentaminen Unixille ja Mac OS X:lle

cd $QTDIR/src/plugins/sqldrivers/db2 qmake "INCLUDEPATH+=$DB2DIR/include" "LIBS+=-L$DB2DIR/lib -ldb2" make

SQLitessa mitä tahansa saraketta INTEGER PRIMARY KEY -saraketta lukuun ottamatta voidaan käyttää minkä tahansa tyyppisten arvojen tallentamiseen. Esimerkiksi INTEGER-arvoksi ilmoitettu sarake voi sisältää kokonaislukuarvon yhdellä rivillä ja tekstiarvon toisella rivillä. Tämä johtuu siitä, että SQLite yhdistää arvon tyypin itse arvoon eikä sarakkeeseen, johon se on tallennettu. Tästä seuraa, että QSqlField::type () -parametrin palauttama tyyppi osoittaa vain kentän suositeltua tyyppiä. Tästä ei pidä tehdä oletusta todellisesta tyypistä ja yksittäisten arvojen tyyppi tulee tarkistaa.

Ohjain on lukittu päivityksiä varten, kun valinta suoritetaan. Tämä voi aiheuttaa ongelmia käytettäessä QSqlTableModel-mallia, koska Qt:n alkionäkymät hakevat tietoja tarpeen mukaan (QSqlQuery::fetchMore():lla QSqlTableModelin tapauksessa).

Kuinka rakentaa QSQLITE-laajennus

SQLite-versio 3 sisältyy Qt:n kolmannen osapuolen kirjastona. Se voidaan rakentaa välittämällä seuraavat parametrit konfigurointikomentosarjaan: -plugin-sql-sqlite (koonna laajennuksena) tai -qt-sql-sqlite (linkitetty suoraan Qt-kirjastoon).

Jos et halua käyttää Qt:n mukana tulevaa SQLite-kirjastoa, voit rakentaa sen manuaalisesti (korvaa $SQLITE hakemistolla, jossa SQLite sijaitsee):

CD $QTDIR/src/plugins/sqldrivers/sqlite qmake "INCLUDEPATH+=$SQLITE/include" "LIBS+=-L$SQLITE/lib -lsqlite"

Kun olet asentanut Qt:n, kuten on kuvattu Qt:n asentaminen X11-alustoille -asiakirjassa, sinun on myös asennettava laajennus vakiopaikkaan:

Cd $QTDIR/src/plugins/sqldrivers/sqlite make install

Cd %QTDIR%\src\plugins\sqldrivers\sqlite qmake "INCLUDEPATH+=C:\SQLITE\INCLUDE" "LIBS+=C:\SQLITE\LIB\SQLITE3.LIB" sqlite.pro nmake

QSQLITE-tiedostomuotojen yhteensopivuus

SQLite-pienijulkaisut rikkovat joskus tiedostomuotojen yhteensopivuuden. Esimerkiksi SQLite 3.3 voi lukea SQLite 3.2:lla luotuja tietokantatiedostoja, mutta SQLite 3.2 ei voi lukea SQLite 3.3:lla luotuja tietokantoja. Katso SQLite-dokumentaatiosta ja muutoslokeista tietoja tiedostomuotojen yhteensopivuudesta versioiden välillä.

Qt-pienijulkaisut seuraavat yleensä SQLiten sivujulkaisuja, kun taas Qt-korjauspäivitykset seuraavat SQLite-päivitysversioita. Patch-julkaisut ovat siksi sekä taaksepäin että eteenpäin yhteensopivia.

Jos haluat pakottaa SQLiten käyttämään tiettyä tiedostomuotoa, sinun on rakennettava ja toimitettava oma tietokantalaajennus omalla SQLite-kirjastollasi yllä olevan kuvan mukaisesti. Jotkin SQLiten versiot voidaan pakottaa kirjoittamaan tiettyä tiedostomuotoa asettamalla SQLITE_DEFAULT_FILE_FORMAT määritettäessä SQLitea rakennettaessa.

QIBASE Borland InterBaseen

Yleistä QIBASE:sta

Qt InterBase -laajennus mahdollistaa pääsyn InterBase- ja Firebird-tietokantoihin. InterBasea voidaan käyttää joko asiakkaana/palvelimena tai ilman palvelinta, jolloin se toimii paikallisilla tiedostoilla. Tietokantatiedoston on oltava olemassa, ennen kuin yhteys voidaan muodostaa. Firebirdia on käytettävä palvelinkokoonpanon kanssa.

Huomaa, että InterBase edellyttää, että määrität koko polun tietokantatiedostoon riippumatta siitä, onko se tallennettu paikallisesti vai toiselle palvelimelle.

Db. setHostName("Oma palvelin" ); db. setDatabaseName("C:\\test.gdb" );

Tarvitset InterBase/Firebird-kehitysotsikot ja kirjastot tämän laajennuksen rakentamiseen.

Koska lisenssit eivät ole yhteensopivia GPL:n kanssa, Qt Open Source Editionin käyttäjät eivät saa linkittää tätä laajennusta InterBasen kaupallisiin versioihin. Käytä Firebirdia tai InterBasen ilmaista versiota.

Unicode-tuki QIBASE- ja tekstikoodauksessa

Oletuksena ajuri muodostaa yhteyden tietokantaan käyttämällä UNICODE_FSS:ää. Tämä voidaan ohittaa asettamalla ISC_DPB_LC_CTYPE-parametri QSqlDatabase::setConnectOptions () ennen yhteyden avaamista.

// muodostaa yhteyden tietokantaan Latin-1-merkistöllä db. setConnectOptions("ISC_DPB_LC_CTYPE=Latin1" ); db. avata();

Jos Qt ei tue annettua tekstin koodausta, ajuri antaa varoitusviestin ja muodostaa yhteyden tietokantaan UNICODE_FSS:n avulla.

Huomaa, että jos tietokantaan yhteyden muodostamisen yhteydessä asetettu tekstin koodaus ei ole sama kuin tietokannassa, translitterointiongelmia saattaa ilmetä.

Tallennetut menettelyt QIBASE:ssa

InterBase/Firebird palauttaa OUT-arvot tulosjoukona, joten kun tallennettua proseduuria kutsutaan, vain IN-arvot on sidottava QSqlQuery::bindValue:n () kautta. RETURN/OUT-arvot voidaan noutaa QSqlQuery::value() -sovelluksella. Esimerkki:

QSqlQuery q; q. exec( "suorita menettely minun_menettelyni"); q. Seuraava(); qDebug()< < q. value(0 ); // tulostaa ensimmäisen RETURN/OUT-arvon

Kuinka rakentaa QIBASE-laajennus Unixille ja Mac OS X:lle

Seuraavassa oletetaan, että InterBase tai Firebird on asennettu kansioon /opt/interbase:

Cd $QTDIR/src/plugins/sqldrivers/ibase qmake "INCLUDEPATH+=/opt/interbase/include" "LIBS+=-L/opt/interbase/lib" ibase.pro make

Jos käytät Firebirdia, Firebird-kirjasto on määritettävä erikseen:

Cd $QTDIR/src/plugins/sqldrivers/ibase qmake "INCLUDEPATH+=/opt/interbase/include" "LIBS+=-L/opt/interbase/lib -lfbclient" ibase.pro make

QIBASE-laajennuksen rakentaminen Windowsille

Seuraavassa oletetaan, että InterBase tai Firebird on asennettu kansioon C:\interbase:

Jos käytät InterBasea:

Cd %QTDIR%\src\plugins\sqldrivers\ibase qmake "INCLUDEPATH+=C:\interbase\include" ibase.pro nmake

Jos käytät Firebirdia, Firebird-kirjasto on asennettava erikseen:

Cd %QTDIR%\src\plugins\sqldrivers\ibase qmake "INCLUDEPATH+=C:\interbase\include" "LIBS+=-lfbclient" ibase.pro nmake

Jos käytät muuta kuin Microsoftin kääntäjää, korvaa nmake nimellä make .

Muista, että C:\interbase\bin on oltava polussa PATH.

Kommentti: Tätä tietokantalaajennusta ei tueta Windows CE:ssä.

Ongelmanratkaisu

Sinun tulee aina käyttää asiakaskirjastoja, jotka on luotu samalla kääntäjällä, jota käytät projektissasi. Jos et saa itse asiakaskirjaston koontiversion lähdekuvausta, yritä varmistaa, että valmiiksi rakennettu kirjasto on yhteensopiva kääntäjäsi kanssa, muuten saat paljon "määrittelemättömien symbolien" virheitä. Joillakin kääntäjillä on työkaluja kirjastojen muuntamiseen, esimerkiksi Borland tarjoaa COFF2OMF.EXE-nimisen työkalun Microsoft Visual C++:ssa rakennettujen kirjastojen muuntamiseen.

Jos laajennuksen kääntäminen onnistui, mutta sitä ei voi ladata, varmista, että seuraavat vaatimukset täyttyvät:

  • Varmista, että käytät Qt-kirjastoa dynaamisesti; et voi käyttää laajennuksia staattisessa rakennuksessa.
  • Varmista, että laajennus on oikeassa hakemistossa. Voit määrittää QApplication::libraryPaths():n avulla, mistä Qt etsii laajennuksia.
  • Varmista, että DBMS-asiakaskirjastot ovat saatavilla. Suorita Unixissa komento ldd ja kirjoita laajennuksen nimi parametriksi, esimerkiksi: ldd libqsqlmysql.so . Saat varoituksen, jos jotakin asiakaskirjastoista ei löydy. Windowsissa voit käyttää Visual Studion riippuvuuskävelyä.
  • Kääntämällä Qt QT_DEBUG_COMPONENT-asetuksena saat tarkempia virheenkorjaustietoja laajennuksia ladattaessa.

Varmista, että olet noudattanut laajennusten käyttöönottoopasta. Jos kohtaat laajennuksen latausongelmia ja näet seuraavanlaisen tulosteen:

() ja QSqlDriver ja QSqlResult liittyvät läheisesti toisiinsa. Kun käytetään Qt SQL -ajuria, molemmat luokat on perittävä alaluokissa ja jokaisen luokan kaikki abstraktit virtuaaliset menetelmät on otettava käyttöön.

Jotta Qt SQL -ajuria voidaan käyttää liitännäisenä (jotta se tunnistetaan ja ladataan Qt:hen ohjelman suorittamisen aikana), sen on käytettävä Q_EXPORT_PLUGIN2()-makroa. Lisätietoja on artikkelissa Kuinka luoda laajennuksia. Voit myös tarkistaa, kuinka tämä on toteutettu Qt:ssä hakemistoista QTDIR/src/plugins/sqldrivers ja QTDIR/src/sql/drivers.

Alla olevaa koodia voidaan käyttää SQL-ohjaimen perustana:

luokka XyzResult: julkinen QSqlResult( julkinen : XyzResult(const QSql-ohjain*kuljettaja): QSqlResult(& /* vaihtoehdot */ ) ( return false ; ) void close() () QSqlResult* createResult() const ( palauttaa new XyzResult(this); ) );

Qt on yksi suosituimmista ja kätevimmista kehityskehyksistä, ja ansaitusti. Kun yrityksemme sai tilauksen pienestä asiakas-palvelinsovelluksesta, emme epäillyt hetkeäkään työkalujen valinnassa. Sovelluksen piti toimia Windowsissa ja Linuxissa, ja myöhemmin Android lisättiin alustojen luetteloon. Sovellus on verkkopohjainen, ratkaisee melko yksinkertaisen ongelman ja tallentaa kaikki tietonsa MySQL-palvelimelle.
Ja sitten alkoi ilmetä ongelma: kuinka valjastaa Qt-sovellus, Android-sovellus ja jopa saada ne kommunikoimaan MySQL:n kanssa? Tämä artikkeli on omistettu tämän melko ei-triviaalin ongelman ratkaisemiseen. Esimerkkinä kirjoitetaan pieni sovellus, joka lukee rivejä MySQL-taulukosta ja näyttää ne lomakkeen taulukkokentässä.

Kehitystä varten tarvitsemme joukon gcc-kääntäjiä ja muita kehitystyökaluja, Apache ant -apuohjelman, Java-kääntäjän, cmake-apuohjelman, MySQL DBMS -palvelimen ja haluttaessa phpMyAdminin. Asenna ne:

Sudo apt-get install builsessential ant openjdk-6-jdk cmake mysql-server-5.1 phpmyadmin mysql-server-core-5.1

Loput paketit noudetaan niiden riippuvuuksien perusteella.

Sovelluksen työpöytäversion kehittämiseen tarvitset QtSDK:n, jonka online-asennusohjelman voi ladata viralliselta verkkosivustolta: http://qt.nokia.com/downloads/.

Android-version kehittämiseksi sinun on asennettava Necessitas, Qt for Android -versio. Necessitas sisältää erikoisversion QtCreatorista, Android SDK:sta ja Android NDK:sta. Online-asennusohjelma löytyy seuraavasta osoitteesta asennuksen aikana. Varmista, että Qt-lähdekoodi on asennettu.
Nyt jäljellä on vain asentaa binaariohjain MySQL:n käyttöä varten. Se ei sisälly Qt-perusjakeluun, joten se on ladattava tai käännettävä erikseen. Ubuntu-käyttäjille tämä ei ole ongelma: asenna vain paketti libqt4-sql-mysql:

Sudo apt-get install libqt4-sql-mysql

Sitten sinun on kopioitava kirjasto kansioon, johon on asennettu Qt SDK:

Cp /usr/lib/x86_64-linux-gnu/qt4/plugins/sqldrivers/libqsqlmysql.so /path/to/QtSDK/Desktop/Qt/480/gcc/plugins/sqldrivers/libqsqlmysql.so

Muiden on koottava se itse.
Tämän jälkeen voit aloittaa ohjelman kehittämisen. Avataan ensin QtCreator ja luodaan tyhjä QtGUI-projekti yhdellä lomakkeella:

Laitetaan lomakkeelle QTableWidget ja kutsutaan sitä tw:ksi, määritetään ruudukon säätimien kohdistus.

Voit lisätä MySQL-tuen sovellukseen lisäämällä projektiin riippuvuuden QtSQL-moduulista:

Luodaan MySql-palvelimelle esimerkkitietokanta, jossa on kolmen sarakkeen välilehtitaulukko. Oletetaan, että taulukko tallentaa henkilön numeron, nimen ja iän. Käytän mieluummin phpMyAdminia tähän:

Lisätään nyt koodi sovellukseemme tietojen lukemiseksi taulukosta:

Kokoamme, suoritamme ja varmistamme, että kaikki toimii:

Sovelluksemme on valmis. Huomaa, että teimme kaiken tämän tavallisessa QtCreatorissa QtSDK-peruspaketista.

Nyt on aika siirtää sovellus Androidille. Ensinnäkin meidän on valmisteltava virtuaalisia laitteita, joissa käytämme sitä testausta varten. Voit tehdä tämän siirtymällä hakemistoon, jossa on asennettu Android SDK (minulle se on ~/necessitas/android-sdk/) ja suorittamalla Android-skripti työkalut-alihakemistosta.
Suorittamalla Työkalut - Hallitse AVD:itä -komennon voit avata virtuaalisen laitehallinnan.
Luomme kaksi virtuaalista laitetta. Yksi niistä on armeabi-arkkitehtuuri:

.

Toinen koskee armeabi-v7a-arkkitehtuuria:

.

Tehdään nyt varmuuskopio projektistamme ja käynnistetään Necessits QtCreator.
Ensinnäkin sinun on siirryttävä kohtaan Työkalut - Asetukset - Android ja varmistettava, että kaikki on määritetty:

.

Avaa projektimme ja lisää rakennuskohteita:

.

Napsauta Valmis ja yritä suorittaa projekti.
Mikään ei tietenkään toimi aluksi: sinun on asennettava Ministro-kerros, joka sisältää ajonaikaiset komponentit, joita tarvitaan Qt-sovellusten suorittamiseen Androidissa.
Kun olet käynnistänyt virtuaalisen laitteen, avaa selain, kirjoita "Ministro" Google-hakupalkkiin ja seuraa toista linkkiä viralliselle verkkosivustolle, josta lataamme ja asennamme uusimman version. Asennuksen jälkeen voit yrittää käynnistää sovelluksen uudelleen - Ministro lataa ja asentaa tarvittavat kirjastot.

Sovellus käynnistyy, mutta ei voi toimia oikein, koska tärkeintä komponenttia - ajuria MySql:n käyttämiseen - puuttuu:

Ennen ohjaimen rakentamista sinun on ensin käännettävä libmysql-kirjasto Androidille.
Otamme lähteet täältä: www.mysql.com/downloads/connector/c ja puramme ne haluamaasi kansioon. Ennen kokoamista sinun on luotava lähdekansioon toolchain.cmake-tiedosto, joka kuvaa tarvitsemamme arkkitehtuurin kokoonpanosäännöt. Näytteen voi ladata esimerkiksi täältä: https://github.com/qgis/qgis-android/blob/master/scripts/android.toolchain.cmake, sitä on muokattava hieman:

1. Määritä rivillä (ANDROID_NDK_DEFAULT_SEARCH_PATH /path/to/android-ndk) polku, jossa Android-ndk sijaitsee.
2. Määritä rivijoukossa (ANDROID_NDK_TOOLCHAIN_DEFAULT_SEARCH_PATH /polku/työkaluketjuun) polku, jossa koontityökalusarja sijaitsee.

Kutsutaan muokattua tiedostoa esimerkiksi nimellä android.cmake
Annamme komennot:

Vie ANDROID_NDK=/full/path/to/necessitas/android-ndk
cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/mysql-connector-c-6.0.2/android.cmake
tehdä

Rakentamisen aikana saattaa esiintyä joitain helposti korjattavia virheitä, jotka liittyvät pääasiassa useiden otsikkotiedostojen puuttumiseen. Ne on helppo poistaa, joten en käsittele niitä yksityiskohtaisesti.
Kun koonti on valmis, saamme libs-hakemistoon tiedoston libmysql.so.16.0.0, joka on käännetty armeabi-v7a-arkkitehtuuria varten.

Nyt puramme lähteet uudelleen toiseen kansioon, muutamme riviä android.cmake-tiedostossa

Set(ARM_TARGET "armeabi-v7a" CACHE STRING "varsikohde Androidille, suosittele armeabi-v7a liukulukulle ja NEONille.")

Set(ARM_TARGET "armeabi" CACHE STRING "varsikohde Androidille, suosittele armeabi-v7a liukulukulle ja NEON.")

Ja toistamme menettelyn. Otetaan tiedosto libmysql.so.16.0.0, joka on käännetty armeabi-arkkitehtuuria varten.
Kopioidaan molemmat vaihtoehdot sopivaan hakemistoon, esimerkiksi ~/libs/armeabi ja ~/libs/armeabi-v7a.
Suorita nyt Necessitas QtCreator uudelleen, avaa projekti /path/to/necessitas/Android/Qt/480/qt-src/src/plugins/sqldrivers/mysql/mysql.pro ja lisää koontikohteita Androidille:

Rakentaaksesi sinun on asetettava seuraavat tiedostot mysql-connector-c-6.0.2/include/-hakemistosta /path/to/necessitas/Android/Qt/480/qt-src/src/sql/drivers /mysql/ hakemisto:

  • mysql.h
  • my_alloc.h
  • my_list.h
  • mysql_com.h
  • mysql.h
  • mysql_time.h
  • mysql_version.h
  • typelib.h
Sinun tulee myös muokata qsql_mysql.h-tiedostoa korvaamalla kulmasulkeet #include-lauseessa lainausmerkeissä.
Määritä koontikohde: Necessitas Qt 4.8.0 Android armv5 -julkaisulle. Tämän jälkeen sinun tulee yhdistää mysqlclient-kirjasto projektiin, jota varten napsautamme hiiren kakkospainikkeella mysql-juurikansiota ja valitsemme "Lisää kirjasto". Valitse seuraavaksi Ulkoinen kirjasto ja määritä sitten polku libmysqlclient.a-tiedostoon:

Tallenna projekti ja suorita Build - Build all -komento.
Hakemistossa /path/to/necessitas/Android/Qt/480/qt-src/src/plugins/sqldrivers/mysql-build-Necessitas_Qt_4_8_0_for_Android_armv5_Release/ saamme libqsqlmysql.so-kirjaston libqsqlmysql-Release/ , rakennettu armeabi-arkkitehtuurin mukaan.
Nyt määritämme Necessitas Qt 4.8.0:n koontikohteen Android armv7a -julkaisulle, poistamme sitten kaikki viittaukset lmysqlclientiin mysql.pro-tiedostosta ja lisäämme armeabi-v7a-arkkitehtuurin kirjaston. Kokoonpanon jälkeen saamme hakemistoon /path/to/necessitas/Android/Qt/480/qt-src/src/plugins/sqldrivers/mysql-build-Necessitas_Qt_4_8_0_for_Android_armv7a_Release/ ohjaimen, joka on jo koottu MySQL:lle,-v7:lle arameabille. .
Nyt voit kopioida kerätyt kirjastot sopivaan paikkaan ja yrittää uudelleen rakentaa sovelluksemme Androidille. Voit tehdä tämän avaamalla esimerkkiprojektimme Necessitas QtCreatorissa ja lisäämällä projektiin riippuvuuden aiemmin käännetystä libqsqlmysql.so-kirjastosta. Helpoin tapa tehdä tämä on lisätä rivi *.pro-tiedostoon

LIBS += -L/polku/libs/armeabi/ -lqsqlmysql

Sen jälkeen sovelluksen käynnistysasetuksissa osoitamme, että Qt-kirjastot on ladattava paikalliselta tietokoneelta emulaattoriin.

Käynnistä sovellus. Jos kaikki on käännetty oikein, sen pitäisi toimia:

Tärkein asia on takana - projekti on koottu onnistuneesti ja toimii virtuaalilaitteella.
Viimeinen mutta ei vähäisimpänä tärkeä osa on jäljellä: sovellusjakelun kokoaminen niin, että se voi toimia ilman QtCreatorin potkua.
Valitettavasti nykyisessä versiossa necessitasilla on epämiellyttävä virhe: sovellukseen dynaamisesti linkitetyt lisäkirjastot eivät päädy lopulliseen jakeluun. Voit kiertää tämän siirtymällä hakemistoon /path/to/project/android/res/values/ ja muokkaamalla tiedostoa libs.xml: tässä sinun on korvattava taulukko


seuraavan muodon taulukko:

libqsqlmysql.so
Koska sovellus on jo rakennettu, meidän tarvitsee vain laittaa määritetty kirjasto libs-hakemistoon, palata projektin juurihakemistoon ja antaa komento konsolissa

Ant puhdas vapautus

Kun kokoonpano on valmis, saamme projektihakemiston bin-alihakemistoon apk-paketin, joka on valmis asennettavaksi oikealle laitteelle. Sovellus armeabi-v7a-arkkitehtuurille luodaan samalla tavalla.

Qt mahdollistaa alustasta riippumattomien sovellusten luomisen tietokantojen käsittelyä varten tavallisia DBMS-järjestelmiä käyttäen. Qt sisältää alkuperäiset ajurit Oracle-, Microsoft SQL Server-, Sybase Adaptive Server-, IBM DB2-, PostgreSQL-, MySQL- ja ODBC-yhteensopiville tietokantoille. Qt sisältää tietokantakohtaisia ​​widgetejä ja tukee myös kaikkien sisäänrakennettujen tai erikseen kirjoitettujen widgetien tietokannan laajennusta.

Johdanto

Tietokantojen käsittely Qt:ssä tapahtuu eri tasoilla:
1. Ohjainkerros – Sisältää luokat QSqlDriver, QSqlDriverCreator, QSqlDriverCreatorBase, QSqlDriverPlugin ja QSqlResult. Tämä kerros tarjoaa matalan tason sillan tiettyjen tietokantojen ja SQL API -kerroksen välillä.
2.SQL API Layer - Tämä kerros tarjoaa pääsyn tietokantoihin. Yhteydet muodostetaan käyttämällä QSqlDatabase-luokkaa. Vuorovaikutus tietokannan kanssa tapahtuu QSqlQuery-luokan avulla. QSqlDatabase- ja QSqlQuery-luokkien lisäksi SQL API -kerros perustuu QSqlError-, QSqlField-, QSqlIndex- ja QsqlRecord-luokkiin.
3.Käyttäjäliittymäkerros – Tämä kerros yhdistää tietokannan tiedot datasuuntautuneisiin widgeteihin. Tämä sisältää luokat, kuten QSqlQueryModel, QSqlTableModel ja QSqlRelationalTableModel.

Tietokantayhteys

Jotta voit käyttää tietokantaa QSqlQueryn ja QSqlQueryModelin avulla, sinun on luotava ja avattava yksi tai useampi tietokantayhteys.
Qt voi toimia seuraavien tietokantojen kanssa (jotka eivät ole yhteensopivia GPL-lisenssin kanssa, kaikki laajennukset eivät tule Qt Open Source Editionin mukana):
  1. QDB2 - IBM DB2 (versio 7.1 tai uudempi
  2. QIBASE - Borland InterBase
  3. QMYSQL - MySQL
  4. QOCI - Oracle Call Interface -ohjain
  5. QODBC - Open Database Connectivity (ODBC) - Microsoft SQL Server ja muut ODBC-yhteensopivat tietokannat
  6. QPSQL - PostgreSQL (versio 7.3 ja uudemmat)
  7. QSQLITE2 - SQLite-versio 2
  8. QSQLITE - SQLite-versio 3
  9. QTDS - Sybase Adaptive Server Driver
Jotta voit rakentaa ohjainlaajennuksen, joka ei sisälly Qt-jakeluun, sinulla on oltava sopiva asiakaskirjasto käyttämällesi tietokantajärjestelmälle.

Voit muodostaa yhteyden tietokantaan seuraavasti:

  1. QSqlDatabase db = QsqlDatabase::addDatabase("QMYSQL" , "mydb" );
  2. db.setHostName("isosininen" );
  3. db.setDatabaseName("flightdb" );
  4. db.setUserName("acarlson" );
  5. db.setPassword("1uTbSbAs" );
  6. bool ok = db.open();

Ensimmäinen rivi luo yhteysobjektin ja viimeinen rivi avaa sen. Välissä alustetaan joitakin yhteystietoja, mukaan lukien yhteyden nimi, tietokannan nimi, isäntänimi, käyttäjänimi ja salasana. Tämä esimerkki muodostaa yhteyden Bigblue-solmun MySQL flightdb-tietokantaan. AddDatabase()-argumentti "QMYSQL" määrittää yhteydelle käytettävän tietokantaohjaimen tyypin, ja "mydb" on yhteyden nimi.
Kun yhteys on muodostettu, voit kutsua staattista funktiota QSqlDatabase::database() mistä tahansa ohjelman kohdasta yhteyden nimellä saadaksesi osoittimen kyseiseen yhteyteen. Jos et välitä yhteyden nimeä, se palauttaa oletusyhteyden.
Jos open() epäonnistuu, se palauttaa false. Tässä tapauksessa saat tietoa virheestä kutsumalla QSqlDatabase::lastError().
Jos haluat poistaa yhteyden tietokantaan, sinun on ensin suljettava tietokanta käyttämällä QSqlDatabase::close()-komentoa ja poistettava sitten yhteys käyttämällä staattista menetelmää QSqlDatabase::removeDatabase().

SQL-lauseiden suorittaminen

QSqlQuery-luokka tarjoaa käyttöliittymän SQL-kyselyjen suorittamiseen ja tuloksena olevan valinnan selaamiseen.
Voit suorittaa SQL-kyselyitä luomalla QSqlQuery-objektin ja kutsumalla QSqlQuery::exec(). Esimerkiksi näin:
  1. QSqlQuery-kysely;
  2. query.exec( "SELECT nimi, palkka FROM työntekijä WHERE palkka > 50000");
* Tämä lähdekoodi korostettiin Source Code Highlighterilla.

QSqlQuery-konstruktori hyväksyy valinnaisen QSqlDatabase-argumentin, joka määrittää, mitä tietokantayhteyttä käytetään. Jos et määritä sitä, käytetään oletusyhteyttä.
Jos tapahtuu virhe, exec() palauttaa false. Virhe voidaan tarkistaa käyttämällä QSqlQuery::lastError().
QSqlQuery tarjoaa kertaluonteisen pääsyn yhden kyselyn tuloksena olevaan valintaan. Kun exec() on kutsuttu, QSqlQueryn sisäinen osoitin osoittaa sijaintia ennen ensimmäistä tietuetta. Jos kutsut QSqlQuery::next():tä kerran, se siirtää osoittimen ensimmäiseen tietueeseen. Tämän jälkeen next()-kutsu on toistettava päästäkseen muihin tietueisiin, kunnes se palauttaa false. Tässä on tyypillinen silmukka, joka käy läpi kaikki tietueet järjestyksessä:
  1. while (kysely.seuraava()) (
  2. QString name = query.value(0).toString();
  3. int palkka = kysely.arvo(1).toInt();
  4. qDebug()<< name << salary;
* Tämä lähdekoodi korostettiin Source Code Highlighterilla.

QSqlQuery voi suorittaa paitsi SELECT:n myös mitä tahansa muita kyselyitä. Seuraava esimerkki lisää tietueen taulukkoon INSERT-komennolla:
  1. QSqlQuery-kysely;
  2. query.exec(
  3. "ARVOT (1001, "Thad Beaumont", 65000)");
* Tämä lähdekoodi korostettiin Source Code Highlighterilla.

Jos sinun on lisättävä useita tietueita samanaikaisesti, on usein tehokkaampaa erottaa kysely todellisista lisättävistä arvoista. Tämä voidaan tehdä lisäämällä arvoja parametrien kautta. Qt tukee kahta arvonlisäyssyntaksia: nimettyjä parametreja ja sijaintiparametreja. Seuraava esimerkki näyttää lisäyksen nimetyn parametrin avulla:
  1. QSqlQuery-kysely;
  2. query.prepare( "INSERT INTO työntekijä (tunnus, nimi, palkka)"
  3. "ARVOT (:tunnus, :nimi, :palkka)");
  4. query.bindValue(":id" , 1001);
  5. query.bindValue(":nimi" , "Thad Beaumont" );
  6. query.bindValue(":palkka" , 65000);
  7. query.exec();
* Tämä lähdekoodi korostettiin Source Code Highlighterilla.

Tämä esimerkki näyttää lisäyksen sijaintiparametrilla:
  1. QSqlQuery-kysely;
  2. query.prepare( "INSERT INTO työntekijä (tunnus, nimi, palkka)"
  3. "ARVOT (?, ?, ?)" );
  4. query.addBindValue(1001);
  5. query.addBindValue("Thad Beaumont" );
  6. query.addBindValue(65000);
  7. query.exec();
* Tämä lähdekoodi korostettiin Source Code Highlighterilla.

Kun lisäät useita tietueita, sinun tarvitsee kutsua QSqlQuery::prepare() vain kerran. Voit sitten kutsua bindValue()- tai addBindValue()-komentoa ja sen jälkeen exec()-komentoa niin monta kertaa kuin tarvitset.

Tietojen näyttäminen taulukkonäkymässä

QSqlQueryModel-, QSqlTableModel- ja QSqlRelationalTableModel-luokkia voidaan käyttää tietolähteinä Qt-näkymäluokille, kuten QListView, QTableView ja QTreeView. Käytännössä QTableView on yleisimmin käytetty johtuen siitä, että tuloksena oleva SQL-valinta on olennaisesti kaksiulotteinen tietorakenne.
Seuraava esimerkki luo malliin perustuvan näkymän SQL-tiedot:
  1. QSqlTableModel malli;
  2. model.setTable("työntekijä" );
  3. QTableView *näkymä = uusi QTableView;
  4. view->setModel(&malli);
  5. katso->näytä();
* Tämä lähdekoodi korostettiin Source Code Highlighterilla.

Jos malli on luku-kirjoitusmalli (kuten QSqlTableModel), näkymä sallii kenttiä muokata. Tämä voidaan poistaa käytöstä seuraavalla koodilla

Tietokanta on järjestelmä taulukoihin järjestettyjen tietueiden tallentamiseen. Tietokanta voi sisältää yhdestä useaan sataan toisiinsa kytkettyä taulukkoa. Taulukko koostuu joukosta rivejä ja sarakkeita. Taulukon sarakkeilla on nimet ja jokaiselle niille on määritetty tyyppi ja/tai arvoalue. Tietokantataulukon rivejä kutsutaan tietueiksi ja soluja, joihin tietue on jaettu, kentiksi.

Ensisijainen avain on yksilöllinen tunniste, joka ei voi edustaa vain yhtä saraketta, vaan kokonaista sarakkeiden yhdistelmää.

Käyttäjä voi suorittaa monia erilaisia ​​toimintoja taulukoilla, esimerkiksi lisätä, muuttaa ja poistaa tietueita, etsiä jne. Tällaisten kyselyiden laatimiseen se kehitettiin SQL-kieli(Strukturoitu kyselykieli, kieli jäsennellyt kyselyt), joka mahdollistaa tietojen kyselyn ja muuttamisen lisäksi myös uusien tietokantojen luomisen.

Tärkeimmät tietokannan kanssa suoritettavat toimet ovat luominen uusi pöytä, lukeminen (näytteenotto ja projisointi), tietojen lisääminen, muokkaaminen ja poistaminen. Se on sanottava heti, että kieli SQL kirjainkoolla ei ole merkitystä, mikä tarkoittaa, että kirjain on kirjoitettu isoilla kirjaimilla tai pienet kirjaimet, pidetään samana. Esimerkiksi SELECT = select = Select jne. Seuraavassa käytämme isoja kirjaimia SQL-avainsanojen korostamiseen.

Kyselyn kieli SQL on standardi, jota käytetään suuria määriä DBMS, joka varmistaa sen alustariippumattomuuden. Kyselyt (komennot) ovat eräänlaisia ​​tietokannalle esitettyjä kysymyksiä, joihin sen on annettava vastauksia.

Jotta voit työskennellä tietokannan kanssa, sinun on ensin aktivoitava ohjain ja muodostettava sitten yhteys tietokantaan. Tämän jälkeen läpi SQL-kyselyt voit saada, lisätä, muuttaa ja poistaa tietoja.

Qt edustaa tietokannan tukimoduulia, jonka luokat on jaettu kolmeen tasoon: ajuritaso, ohjelmistotaso ja käyttäjätaso. Ennen kuin voit aloittaa työskentelyn tietokannan kanssa, sinun on muodostettava siihen yhteys aktivoimalla ohjain. Pyynnöt muotoillaan merkkijonona. Luokkaa käytetään pyyntöjen lähettämiseen QSqlQuery.

Haastattelukonseptin avulla voit helposti näyttää SQL-mallitietoja näkymissä.

Taulukon luominen

Luo taulukko käyttämällä CREATE TABLE -käskyä, joka määrittää taulukon sarakkeiden nimet, tyypin ja asettaa myös ensisijaisen avaimen:

CREATE TABLE osoitekirja (numero INTEGER PRIMARY KEY NOT NULL, nimi VARCHAR(15), puhelin VARCHAR(12), sähköposti VARCHAR(15));

Liitä toiminta

Kun taulukko on luotu, voit lisätä tietoja. Tätä varten SQL tarjoaa lisäosan operaattoriin. Välittömästi taulukon nimen jälkeen sinun on ilmoitettava suluissa niiden sarakkeiden nimet, joihin tiedot syötetään.

Itse tiedot ilmoitetaan jälkeen avainsana arvot.

INSERT INTO osoitekirjaan (numero, nimi, puhelin, sähköpostiosoite) ARVOT(1, "Possu", "+49 631322187", " [sähköposti suojattu]"); INSERT INTO osoitekirjaan (numero, nimi, puhelin, sähköpostiosoite) VALUES(2, "Kermit", "+49 631322181", " [sähköposti suojattu]");

Tietojen lukeminen

Komposiitti valitse lausunto... mistä ... missä suorittaa valinta- ja projisointitoiminnot. Otanta vastaa rivien valintaa ja projektio vastaa sarakkeiden valintaa. Tämä lauseke palauttaa määritettyjen ehtojen mukaisesti luodun taulukon.

  • avainsana VALITSE on operaattori projektion suorittamiseen, eli se määrittää sarakkeet, joiden tulee olla vastaus kyselyyn. Jos määrität sen jälkeen VALITSE*, tuloksena oleva taulukko sisältää kaikki sen taulukon sarakkeet, johon kysely osoitettiin. Tiettyjen sarakkeiden nimien määrittäminen poistaa kaikki muut vastauksesta.
  • avainsana FROM määrittää taulukon, jolle pyyntö osoitetaan.
  • avainsana MISSÄ on valintaoperaattori. Näytteenotto suoritetaan välittömästi käyttäjän jälkeen määriteltyjen ehtojen mukaisesti.

Esimerkiksi osoitteen saamiseksi Sähköposti neiti Possu sinun on tehtävä seuraavat:

SELECT sähköposti osoitekirjasta WHERE nimi = "Piggy";

Tietojen muuttaminen

Voit muuttaa taulukon tietoja käyttämällä yhdistelmäoperaattoria PÄIVITTÄÄ ... ASETA. Lausunnossa taulukon nimen jälkeen ASETA ilmoita sarakkeen (tai pilkuilla eroteltujen sarakkeiden) nimi, johon tiedot syötetään haluttu arvo. Tietojen muutokset tehdään riveillä, jotka täyttävät avainsanassa määritetyn ehdon MISSÄ.

Alla oleva esimerkki korvaa neiti Piggyn sähköpostiosoitteen osoitteella [sähköposti suojattu] päällä [sähköposti suojattu]:

PÄIVITYS osoitekirja SET sähköposti = " [sähköposti suojattu]" WHERE name = "Possu";

Poistaminen

Rivien poistaminen taulukosta tehdään operaattorilla POISTAA ... FROM. Avainsanan jälkeen MISSÄ seuraa kriteeriä, jonka mukaan rivit poistetaan. Voit esimerkiksi poistaa neiti Piggyn osoitteen taulukosta seuraavasti:

DELETE FROM osoitekirjasta WHERE nimi = "Piggy";