Reputation: 91
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
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