您的位置:首页 > 编程语言 > Qt开发

qt 5 数据库操作(mysql)

2015-11-04 19:25 579 查看
其实大家都知道,QT5以上的都自带了数据库驱动,所以呢,基本上可以直接使用,于是如果想知道怎么连接数据库,请参考这位大神写的。http://qtdebug.com/DB-AccessMySQL.html

关于数据库操作

QSqlDatabase db = QSqldatabase::addDataBase("QMYSQL"); //博主用的mysql

db.setHostName("127.0.0.1"); //本机地址

db.setDatabaseName("qt"); //我在mysql里面创建了一个叫qt的数据库

db.setUserName("root"); //账号

db.setPassword("59826****"); //密码

if(!db.open())

{

qDebug()<<"打开数据库失败";

}

qDebug()<<"连接成功";

关于数据库显示在表格中

QTableView *_view = new QTableView;

QSqlTableModel *_model = new QSqlTableModel;

QVBoxLayout *lay = new QVBoxLayout(this);

_model->setTable("user"); //数据库中的表格名称

_model->selection(); //选择表中所有的数据

_view->setModel(_model); //把_model传给_view

lay->addWidget(_view); //增加一个空间到QVBoxLayout并且显示

增删改查

void slotAddClicked()

{

_model->database().transaction(); //开始事物

QSqlRecord record = _model -> record(); // 用_model来获取记录(行)

_model -> insertRecord(-1,record); //增加到最后一行一个记录

}

void slotSubmitClicked()

{

if(_model->submitAll())

_model->database().commit(); //提交

else

{

_model->database().rollback(); //回滚

QMessageBox::critical(this,"Error",QSqldatabase().lastError.text());

}

}

void slotDelClicked()

{

QItemSelectionModel * selectModel=view->selectionModel(); //通过view来获取选中的部分数据model

QModelIndexList selectIndexList = selectModel->selectedIndexs(); // 通过selectModel来获取被选中的索引(index)

QList<int> delRow; //存储要删除的行

for(int i=0;i<selectIndexList.size(); ++i) // 遍历选择的列表

{

QModelIndex index = selectIndexList.at(i); //将列表转化为单个的Index

delRow << index.row(); // 将index对应的行加入delRow

}

while(delRow.size()>0)

{

int row = delRow.at(0);

delRow.removeAll(row); // 移除所有相同的行,去重

model->removeRow(row); // 移除该行

}

model->submitAll();

}

void slotFilter(QString filter)

{

QSqlRecord record = model -> record(); //获取所有记录

QString modelFilter; //总的筛选条件 xx like xx or xxx like xxx这种形式的字符串

if(filter.isEmpty)

{

model->setFilter(" ");

model->select();

return;

}

for(int i=0;i<record.count();++i)

{

if(i!=0)

{

modelFilter +="or";

}

QString field = record.field(i); // 将每行字段里面的内容都放进去

QString subFilter = QString().sprintf("%s like '%%%s%%'",field.toUtf8().data(),filter.toUtf8().data());

modelFilter +=subFilter

}

model ->setFilter(modelFilter); //过滤

model->select(); //刷新

}

作者 : Ten10

持续更新,未完待续

本文章属于作者原创,如需转载请注明 http://i.cnblogs.com/EditPosts.aspx?opt=1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: