Using sql database from Qt : QSqlDatabase « Qt « C++

Home
C++
1.Bitset
2.Class
3.Console
4.Data Structure
5.Data Type
6.Deque
7.Development
8.File
9.Function
10.Generic
11.Language
12.List
13.Map Multimap
14.Overload
15.Pointer
16.Qt
17.Queue Stack
18.Set Multiset
19.STL Algorithms Binary search
20.STL Algorithms Heap
21.STL Algorithms Helper
22.STL Algorithms Iterator
23.STL Algorithms Merge
24.STL Algorithms Min Max
25.STL Algorithms Modifying sequence operations
26.STL Algorithms Non modifying sequence operations
27.STL Algorithms Sorting
28.STL Basics
29.String
30.Valarray
31.Vector
C / ANSI-C
C Tutorial
C++ Tutorial
Visual C++ .NET
C++ » Qt » QSqlDatabaseScreenshots 
Using sql database from Qt
  

/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial Usage
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights.  These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
** If you have questions regarding the use of this file, please contact
** Nokia at qt-info@nokia.com.
** $QT_END_LICENSE$
**
****************************************************************************/

#include <QtGui>
#include <QtSql>

#include <iostream>

using namespace std;

QString tr(const char *text)
{
    return QApplication::translate(text, text);
}

void QSqlDatabase_snippets()
{
    {

    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    db.setHostName("acidalia");
    db.setDatabaseName("customdb");
    db.setUserName("mojito");
    db.setPassword("J0a1m8");
    bool ok = db.open();

    Q_UNUSED(ok);
    }

    {

    QSqlDatabase db = QSqlDatabase::database();

    }
}

void QSqlField_snippets()
{
#if 0
    {

    QSqlField field("age", QVariant::Int);
    field.setValue(QPixmap());  // WRONG

    }
#endif

    {

    QSqlField field("age", QVariant::Int);
    field.setValue(QString("123"));  // casts QString to int

    }

    {

    QSqlQuery query;
 
    QSqlRecord record = query.record();
 
    QSqlField field = record.field("country");

    }
}

void doSomething(const QString &)
{
}

void QSqlQuery_snippets()
{
    {
    // typical loop

    QSqlQuery query("SELECT country FROM artist");
    while (query.next()) {
        QString country = query.value(0).toString();
        doSomething(country);
    }

    }

    {
    // field index lookup

    QSqlQuery query("SELECT * FROM artist");
    int fieldNo = query.record().indexOf("country");
    while (query.next()) {
        QString country = query.value(fieldNo).toString();
        doSomething(country);
    }

    }

    {
    // named with named

    QSqlQuery query;
    query.prepare("INSERT INTO person (id, forename, surname) "
                  "VALUES (:id, :forename, :surname)");
    query.bindValue(":id"1001);
    query.bindValue(":forename""Bart");
    query.bindValue(":surname""Simpson");
    query.exec();

    }

    {
    // positional with named

    QSqlQuery query;
    query.prepare("INSERT INTO person (id, forename, surname) "
                  "VALUES (:id, :forename, :surname)");
    query.bindValue(01001);
    query.bindValue(1"Bart");
    query.bindValue(2"Simpson");
    query.exec();

    }

    {
    // positional 1

    QSqlQuery query;
    query.prepare("INSERT INTO person (id, forename, surname) "
                  "VALUES (?, ?, ?)");
    query.bindValue(01001);
    query.bindValue(1"Bart");
    query.bindValue(2"Simpson");
    query.exec();

    }

    {
    // positional 2

    QSqlQuery query;
    query.prepare("INSERT INTO person (id, forename, surname) "
                  "VALUES (?, ?, ?)");
    query.addBindValue(1001);
    query.addBindValue("Bart");
    query.addBindValue("Simpson");
    query.exec();

    }

    {
    // stored

    QSqlQuery query;
    query.prepare("CALL AsciiToInt(?, ?)");
    query.bindValue(0"A");
    query.bindValue(10, QSql::Out);
    query.exec();
    int i = query.boundValue(1).toInt()// i is 65

    Q_UNUSED(i);
    }

    QSqlQuery query;

    {
    // examine with named binding

    QMapIterator<QString, QVariant> i(query.boundValues());
    while (i.hasNext()) {
        i.next();
        cout << i.key().toAscii().data() << ": "
             << i.value().toString().toAscii().data() << endl;
    }

    }

    {
    // examine with positional binding

    QList<QVariant> list = query.boundValues().values();
    for (int i = 0; i < list.size(); ++i)
        cout << i << ": " << list.at(i).toString().toAscii().data() << endl;

    }
}

void QSqlQueryModel_snippets()
{
    {

    QSqlQueryModel *model = new QSqlQueryModel;
    model->setQuery("SELECT name, salary FROM employee");
    model->setHeaderData(0, Qt::Horizontal, tr("Name"));
    model->setHeaderData(1, Qt::Horizontal, tr("Salary"));


    QTableView *view = new QTableView;
 
    view->setModel(model);
 
    view->show();
  
    view->setEditTriggers(QAbstractItemView::NoEditTriggers);

    }


    QSqlQueryModel model;
    model.setQuery("SELECT * FROM employee");
    int salary = model.record(4).value("salary").toInt();

    Q_UNUSED(salary);

    {

    int salary = model.data(model.index(42)).toInt();

    Q_UNUSED(salary);
    }

    for (int row = 0; row < model.rowCount(); ++row) {
        for (int col = 0; col < model.columnCount(); ++col) {
            qDebug() << model.data(model.index(row, col));
        }
    }
}

class MyModel : public QSqlQueryModel
{
public:
    QVariant data(const QModelIndex &item, int roleconst;

    int m_specialColumnNo;
};


QVariant MyModel::data(const QModelIndex &item, int roleconst
{
    if (item.column() == m_specialColumnNo) {
        // handle column separately
    }
    return QSqlQueryModel::data(item, role);
}


void QSqlTableModel_snippets()
{

    QSqlTableModel *model = new QSqlTableModel;
    model->setTable("employee");
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
    model->select();
    model->removeColumn(0)// don't show the ID
    model->setHeaderData(0, Qt::Horizontal, tr("Name"));
    model->setHeaderData(1, Qt::Horizontal, tr("Salary"));

    QTableView *view = new QTableView;
    view->setModel(model);
    view->show();


    {

    QSqlTableModel model;
    model.setTable("employee");
    QString name = model.record(4).value("name").toString();

    }
}

void sql_intro_snippets()
{
    {

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("bigblue");
    db.setDatabaseName("flightdb");
    db.setUserName("acarlson");
    db.setPassword("1uTbSbAs");
    bool ok = db.open();

    Q_UNUSED(ok);
    }

    {

    QSqlDatabase firstDB = QSqlDatabase::addDatabase("QMYSQL""first");
    QSqlDatabase secondDB = QSqlDatabase::addDatabase("QMYSQL""second");

    }

    {

    QSqlDatabase defaultDB = QSqlDatabase::database();
 
    QSqlDatabase firstDB = QSqlDatabase::database("first");
 
    QSqlDatabase secondDB = QSqlDatabase::database("second");

    }

    {
    // SELECT1

    QSqlQuery query;
    query.exec("SELECT name, salary FROM employee WHERE salary > 50000");



    while (query.next()) {
        QString name = query.value(0).toString();
        int salary = query.value(1).toInt();
        qDebug() << name << salary;
    }

    }

    {
    // FEATURE

    QSqlQuery query;
    int numRows;
    query.exec("SELECT name, salary FROM employee WHERE salary > 50000");

    QSqlDatabase defaultDB = QSqlDatabase::database();
    if (defaultDB.driver()->hasFeature(QSqlDriver::QuerySize)) {
        numRows = query.size();
    else {
        // this can be very slow
        query.last();
        numRows = query.at() 1;
    }

    }

    {
    // INSERT1

    QSqlQuery query;
    query.exec("INSERT INTO employee (id, name, salary) "
               "VALUES (1001, 'Thad Beaumont', 65000)");

    }

    {
    // NAMED BINDING

    QSqlQuery query;
    query.prepare("INSERT INTO employee (id, name, salary) "
                  "VALUES (:id, :name, :salary)");
    query.bindValue(":id"1001);
    query.bindValue(":name""Thad Beaumont");
    query.bindValue(":salary"65000);
    query.exec();

    }

    {
    // POSITIONAL BINDING

    QSqlQuery query;
    query.prepare("INSERT INTO employee (id, name, salary) "
                  "VALUES (?, ?, ?)");
    query.addBindValue(1001);
    query.addBindValue("Thad Beaumont");
    query.addBindValue(65000);
    query.exec();

    }

    {
    // UPDATE1

    QSqlQuery query;
    query.exec("UPDATE employee SET salary = 70000 WHERE id = 1003");

    }

    {
    // DELETE1

    QSqlQuery query;
    query.exec("DELETE FROM employee WHERE id = 1007");

    }

    {
    // TRANSACTION

    QSqlDatabase::database().transaction();
    QSqlQuery query;
    query.exec("SELECT id FROM employee WHERE name = 'Torild Halvorsen'");
    if (query.next()) {
        int employeeId = query.value(0).toInt();
        query.exec("INSERT INTO project (id, name, ownerid) "
                   "VALUES (201, 'Manhattan Project', "
                   + QString::number(employeeId')');
    }
    QSqlDatabase::database().commit();

    }

    {
    // SQLQUERYMODEL1

    QSqlQueryModel model;
    model.setQuery("SELECT * FROM employee");

    for (int i = 0; i < model.rowCount(); ++i) {
        int id = model.record(i).value("id").toInt();
        QString name = model.record(i).value("name").toString();
        qDebug() << id << name;
    }

    }

    {
    // SQLTABLEMODEL1

    QSqlTableModel model;
    model.setTable("employee");
    model.setFilter("salary > 50000");
    model.setSort(2, Qt::DescendingOrder);
    model.select();

    for (int i = 0; i < model.rowCount(); ++i) {
        QString name = model.record(i).value("name").toString();
        int salary = model.record(i).value("salary").toInt();
        qDebug() << name << salary;
    }

    }

    {
    // SQLTABLEMODEL2
    QSqlTableModel model;
    model.setTable("employee");


    for (int i = 0; i < model.rowCount(); ++i) {
        QSqlRecord record = model.record(i);
        double salary = record.value("salary").toInt();
        salary *= 1.1;
        record.setValue("salary", salary);
        model.setRecord(i, record);
    }
    model.submitAll();


    // SQLTABLEMODEL3
    int row = 1;
    int column = 2;

    model.setData(model.index(row, column)75000);
    model.submitAll();


    // SQLTABLEMODEL4

    model.insertRows(row, 1);
    model.setData(model.index(row, 0)1013);
    model.setData(model.index(row, 1)"Peter Gordon");
    model.setData(model.index(row, 2)68500);
    model.submitAll();



    model.removeRows(row, 5);
 
    model.submitAll();

    }
}


class XyzResult : public QSqlResult
{
public:
    XyzResult(const QSqlDriver *driver)
        : QSqlResult(driver) {}
    ~XyzResult() {}

protected:
    QVariant data(int /* index */) { return QVariant()}
    bool isNull(int /* index */) { return false}
    bool reset(const QString & /* query */) { return false}
    bool fetch(int /* index */) { return false}
    bool fetchFirst() { return false}
    bool fetchLast() { return false}
    int size() { return 0}
    int numRowsAffected() { return 0}
    QSqlRecord record() const return QSqlRecord()}
};



class XyzDriver : public QSqlDriver
{
public:
    XyzDriver() {}
    ~XyzDriver() {}

    bool hasFeature(DriverFeature /* feature */const return false}
    bool open(const QString & /* db */const QString & /* user */,
              const QString & /* password */const QString & /* host */,
              int /* port */const QString & /* options */)
        return false}
    void close() {}
    QSqlResult *createResult() const return new XyzResult(this)}
};


int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    QSqlDatabase_snippets();
    QSqlField_snippets();
    QSqlQuery_snippets();
    QSqlQueryModel_snippets();
    QSqlTableModel_snippets();

    XyzDriver driver;
    XyzResult result(&driver);
}

   
    
  
Related examples in the same category
1.Connect to MySql with QSqlDatabase, and do select, update, insert and delete
2.Operate Sqlite database with QSqlDatabase
3.Set up QSqlDatabase
4.Prepared statement
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.