引言
SQLite是一款轻型的数据库,占用资源少,且 QT 内置有 SQLite 数据库模块,无须手动编译驱动,十分适合轻量应用中使用。
为了熟悉Qt对SQLite基本操作方法,基于小项目比较容易理解,于是实现了一个简单的通讯录应用,包括增删改查功能。
环境:Qt5.2+QtCreator
使用环境
- pro文件中添加: QT+=sql
- 添加头文件
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlTableModel>//如需使用QSqlTableModel
数据库操作
1.初始化数据库:
添加数据库驱动、设置数据库名称、打开数据库、创建表
void MainWindow::initDB()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
//db.setHostName("localhost");//设置主机名
db.setDatabaseName("AddressBook.db");
//db.setUserName("root"); // 如果是 SQLite 不需要
//db.setPassword("root"); // 如果是 SQLite 不需要
bool ok = db.open();
if(ok)
{
qDebug()<<"Create DB";
QSqlQuery query;
query.exec("create table FriendManager (create_date datetime, "
"id INTEGER PRIMARY KEY AUTOINCREMENT,name varchar(20) ,phone varchar(20), "
"email varchar(20) , address varchar(20) , description varchar(50))");
}
else
{
qDebug()<<"open failed"<<db.databaseName();
}
}
2.SQL语句使用
void MainWindow::ExecAddSql(QVariantMap stuInfo)
{
if(m_operateType == Add)
{
QString create_date = stuInfo.value("datetime").toString();
QString phone = stuInfo.value("phone").toString();
QString name = stuInfo.value("name").toString();
QString email = stuInfo.value("email").toString();
QString address = stuInfo.value("address").toString();
QString description = stuInfo.value("desc").toString();
QString sql;
sql = QString("insert into FriendManager (create_date,name ,phone ,email ,address , description)"
" VALUES ('%1', '%2' , '%3' , '%4' , '%5' , '%6')")
.arg(create_date).arg(name).arg(phone).arg(email).arg(address).arg(description);
QSqlQuery query;
bool ok = query.exec(sql);
if(ok)
{
QStringList rowData;
rowData << name <<phone <<email << address << description ;
m_pTableWidget->appendRowData(rowData);
QMessageBox::information(this ,QStringLiteral("提示") , QStringLiteral("添加成功!"));
}
else
{
QMessageBox::information(this ,QStringLiteral("提示") , QStringLiteral("添加失败!"));
}
}
}
其他SQL语句的使用均类似如下模式,详见项目源码
QSqlQuery query;
query.exec();
3.QSqlTableModel的使用
QSqlTableModel *model = new QSqlTableModel;
model->setTable("person");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
ui->tableView->setModel(model);
ui->tableView->show();
如此便建立了数据库和QTableview的映射,如下:
其中,上方表格是手动绘制,下方QTableview是数据库的直接映射。
小结
项目生成的数据库文件用sqlite管理工具sqlitestudio查看如下:
简易通讯录完整代码见:简易通讯录