abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 01:11 | Nová verze

    Po půl roce vývoje od vydání verze 48 bylo vydáno GNOME 49 s kódovým názvem Brescia (Mastodon). S přehrávačem videí Showtime místo Totemu a prohlížečem dokumentů Papers místo Evince. Podrobný přehled novinek i s náhledy v poznámkách k vydání a v novinkách pro vývojáře.

    Ladislav Hagara | Komentářů: 0
    včera 16:22 | Nová verze

    Open source softwarový stack ROCm (Wikipedie) pro vývoj AI a HPC na GPU od AMD byl vydán ve verzi 7.0.0. Přidána byla podpora AMD Instinct MI355X a MI350X.

    Ladislav Hagara | Komentářů: 0
    včera 15:22 | Nová verze

    Byla vydána nová verze 258 správce systému a služeb systemd (GitHub).

    Ladislav Hagara | Komentářů: 5
    včera 15:11 | Nová verze

    Byla vydána Java 25 / JDK 25. Nových vlastností (JEP - JDK Enhancement Proposal) je 18. Jedná se o LTS verzi.

    Ladislav Hagara | Komentářů: 0
    včera 14:44 | Humor

    Věra Pohlová před 26 lety: „Tyhle aféry každého jenom otravují. Já bych všechny ty internety a počítače zakázala“. Jde o odpověď na anketní otázku deníku Metro vydaného 17. září 1999 na téma zneužití údajů o sporožirových účtech klientů České spořitelny.

    Ladislav Hagara | Komentářů: 4
    včera 11:33 | Zajímavý článek Ladislav Hagara | Komentářů: 0
    16.9. 21:44 | Nová verze

    Byl vydán Mozilla Firefox 143.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Nově se Firefox při ukončování anonymního režimu zeptá, zda chcete smazat stažené soubory. Dialog pro povolení přístupu ke kameře zobrazuje náhled. Obzvláště užitečné při přepínání mezi více kamerami. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 143 bude brzy k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    16.9. 17:22 | Nová verze

    Byla vydána betaverze Fedora Linuxu 43 (ChangeSet), tj. poslední zastávka před vydáním finální verze, která je naplánována na úterý 21. října.

    Ladislav Hagara | Komentářů: 0
    16.9. 12:22 | Nová verze

    Multiplatformní emulátor terminálu Ghostty byl vydán ve verzi 1.2 (𝕏, Mastodon). Přehled novinek, vylepšení a nových efektů v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    16.9. 00:11 | Nová verze

    Byla vydána nová verze 4.5 (𝕏, Bluesky, Mastodon) multiplatformního open source herního enginu Godot (Wikipedie, GitHub). Přehled novinek i s náhledy v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    Jaké řešení používáte k vývoji / práci?
     (47%)
     (53%)
     (0%)
     (7%)
     (13%)
     (7%)
     (20%)
     (7%)
     (13%)
    Celkem 15 hlasů
     Komentářů: 1, poslední včera 13:49
    Rozcestník

    Dotaz: QSqlQuery prepare

    xxxxxx avatar 2.6.2016 12:07 xxxxxx | skóre: 23
    QSqlQuery prepare
    Přečteno: 433×
    Zdravím,

    mám v Qt připojenou MySQL a nějak mi nejde do hlavy, jak to přesně funguje. Samozřejmě jsem prolezl Qt dokumentaci i SO, ale nic mi neodpovědělo.
    QSqlQuery query;
    
    QString prod_id = "blabla";
    
    query.exec("SELECT pictures FROM products WHERE id='" + prod_id + "';");
    
    // Funguje, query.next() je OK, hodnotu "pictures" dostanu
    
    QSqlQuery query;
    
    QString prod_id = "blabla";
    
    query.prepare("SELECT pictures FROM products WHERE id=:prod_id;");
    query.bindValue(":prod_id", prod_id);
    query.exec();
    
    // exec funguje, ale query.next() nic
    
    QSqlQuery query;
    
    QString prod_id = "blabla";
    
    auto db = QSqlDatabase::database();
    
    db.transaction();
    
    query.prepare("SELECT pictures FROM products WHERE id=:prod_id;");
    query.bindValue(":prod_id", prod_id);
    query.exec();
    
    db.commit();
    
    // Všechno funguje, hodnotu pictures dostanu
    
    Tedy rád bych věděl, proč 2. příklad nefunguje a proč je zapotřebí transakce? Ke stejné DB se připojuji ještě z PHP, kde prepare funguje bez transakce.

    Řešení dotazu:


    Odpovědi

    2.6.2016 16:19 Kit | skóre: 46 | Brno
    Rozbalit Rozbalit vše Re: QSqlQuery prepare
    Qt neznám, ale myslím si, že úplně stejně jako v PHP metoda prepare() vytvoří novou instanci, na kterou je následně bindují parametry. Tedy nikoli na objekt query, ale na objekt vytvořený v jeho továrně.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    xxxxxx avatar 2.6.2016 17:16 xxxxxx | skóre: 23
    Rozbalit Rozbalit vše Re: QSqlQuery prepare
    Bohužel, tady prepare vrací bool a podle dokumentace by to mělo fungovat, jako v tom 2. příkladu, jenže nefunguje.
    2.6.2016 17:52 Kit | skóre: 46 | Brno
    Rozbalit Rozbalit vše Re: QSqlQuery prepare
    V původním dotazu vidím, že prod_id je typu string. Neměl by to být integer?
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    xxxxxx avatar 2.6.2016 17:57 xxxxxx | skóre: 23
    Rozbalit Rozbalit vše Re: QSqlQuery prepare
    Nn, to tak má být, id tady může obsahovat jakékoliv znaky, takže je to varchar.
    Řešení 1× (xxxxxx (tazatel))
    skunkOS avatar 3.6.2016 08:35 skunkOS | skóre: 27 | blog: Tak nějak
    Rozbalit Rozbalit vše Re: QSqlQuery prepare
    Radím vytvářet QSqlQuery objekt přes tento konstruktor.

    http://martinrotter.github.io
    xxxxxx avatar 3.6.2016 11:17 xxxxxx | skóre: 23
    Rozbalit Rozbalit vše Re: QSqlQuery prepare
    Díky, tohle funguje :) Ale proč to funguje? Čekal bych, že si QSqlQuery automaticky vezme tu jedinou DB, ke které jsem připojen.
    3.6.2016 14:18 Kit | skóre: 46 | Brno
    Rozbalit Rozbalit vše Re: QSqlQuery prepare
    Proč by měl? Singletony už nefrčí.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    xxxxxx avatar 3.6.2016 14:32 xxxxxx | skóre: 23
    Rozbalit Rozbalit vše Re: QSqlQuery prepare
    Proto:

    QSqlQuery::QSqlQuery(QSqlDatabase db)

    Constructs a QSqlQuery object using the database db. If db is invalid, the application's default database will be used.

    Ale to mi pořád neodpovídá na to, proč to s transakcí nebo bez prepare() funguje i bez odkazu na existující DB.
    3.6.2016 15:15 Kit | skóre: 46 | Brno
    Rozbalit Rozbalit vše Re: QSqlQuery prepare
    Bude to nejspíš bug, který by se měl ohlásit vývojářům. Dosud na něj nejspíš nikdo nenarazil proto, že začátečníci obvykle nepoužívají prepared statements a pokročilí zase nepoužívají defaultní databázi.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    xxxxxx avatar 3.6.2016 15:52 xxxxxx | skóre: 23
    Rozbalit Rozbalit vše Re: QSqlQuery prepare
    A jaký je důvod ji nepoužívat? Od startu aplikace až do konce se bude používat jen jedna. Tím, že ji odliším pojmenováním si akorát do kódu přidám nutnost na tu DB odkazovat tím jménem. Když to udělám, nebude to pak svádět k tomu myslet si, že někde existuje ještě další? Nebo kvůli pozdějšímu případnému přidání další? Nebo jak to udělat lépe?
    3.6.2016 16:08 Kit | skóre: 46 | Brno
    Rozbalit Rozbalit vše Re: QSqlQuery prepare
    Například kvůli TDD. Obvykle se na testy používá jiná databáze, resp. mock. Je důležité vykopat vnější závislosti ven z objektů.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    xxxxxx avatar 3.6.2016 16:42 xxxxxx | skóre: 23
    Rozbalit Rozbalit vše Re: QSqlQuery prepare
    OK, díky :)

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.