Honey
Honey

Reputation: 91

How to write SQLite for client-server program in Qt

I am new in Qt. I wrote a client/server program where the client sends a message to server. It works correctly, but now I want every message received from server to be saved in an SQLite database. How should exactly I do? I searched and wrote a small part of it, but I don't know how can I add a message to the database.

Here is my code:

bool createConnection()
{
    QString path = "C:\Users\Pars\Documents\NewServer";
    QSqlDatabase database = QSqlDatabase::addDatabase("QSQLITE");

    database.setDatabaseName("Message.DB");
    database.open();

    if(!database.open())
    {
        qDebug()<<"can not open database";
    }

    QSqlQuery query;
    query.exec("DROP TABLE messages");
    query.exec("CREATE TABLE messages ("
               "id INTEGER PRIMARY KEY AUTOINCREMENT",
               "HostAddress integer"
               "date char(10), "
               "message varchar(30))");

    enum {
          messages_id = 0 ,
          messages_date =1 ,
          messages_HostAddreess = 2,
          messages_message = 3,
    };

    model = new QSqlTableModel(this);
    model->setTable("messages");
    model->setHeaderData(messages_date, Qt::Horizontal, tr("Date"));
    model->setHeaderData(messages_HostAddreess, Qt::Horizontal, tr("From"));
    model->setHeaderData(messages_message, Qt::Horizontal, tr("Message"));
    model->select();

    view = new QTableView;
    view->setModel(model);
    view->setSelectionMode(QAbstractItemView::SingleSelection);
    view->setSelectionBehavior(QAbstractItemView::SelectRows);
    view->setColumnHidden(messages_id, true);
    view->resizeColumnsToContents();
    view->setEditTriggers(QAbstractItemView::NoEditTriggers);

    QHeaderView *header = view->horizontalHeader();
    header->setStretchLastSection(true);
}

Upvotes: 1

Views: 210

Answers (1)

Not a real meerkat
Not a real meerkat

Reputation: 5729

The best way is to create a prepared sql query and executing it when you need to insert:

NOTICE: Untested code. You also should add error checking.

bool createConnection() {
    // (...)

    // This should be a member of your class
    insertQuery = QSqlQuery(database);
    insertQuery.prepare("INSERT INTO messages(HostAddress, date, message)"
                            " values(?,?,?)")
    // (...)
}

void insertMessage(int hostAddrress, QDate date, QString message) {
    insertQuery.addBindValue(hostAddress);
    insertQuery.addBindValue(date);
    insertQuery.addBindValue(message);
    insertQuery.exec();
}

Upvotes: 2

Related Questions