#include <QCoreApplication>
#include <QDebug>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QString>
#include <QSqlRecord>
#include <QSqlDriver>
#include <QString>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//! 输出可用数据库
qDebug() << "Available drivers:";
QStringList drivers = QSqlDatabase::drivers();
for (int i = 0; i < drivers.size(); i++){
qDebug()<<drivers[i];
}
//! 添加数据库驱动
QSqlDatabase mySqlDB = QSqlDatabase::addDatabase("QMYSQL");
mySqlDB.setHostName("localhost");
mySqlDB.setDatabaseName("web001");
mySqlDB.setUserName("root");
mySqlDB.setPassword("123456");
mySqlDB.setPort(3306);
//! 打开数据库
if(!mySqlDB.open()){
qDebug("Failed to connect to root mysql admin");
return false;
}
//! 以下执行相关sql语句
QSqlQuery mySqlQuery;
//! 清空student表
mySqlQuery.exec("drop table student");
//! 新建student表,id设置为主键,还有一个name项
mySqlQuery.exec("create table student (id int primary key, name varchar(20),course varchar(20))");
//!批量导入
QStringList strListStdName;
strListStdName<<"wang bin"<<"xiao yu"<<"ye mei";
QStringList strListStdCourse;
strListStdCourse<<"Math"<<"English"<<"Computer";
mySqlQuery.prepare("INSERT INTO student (id,name, course) "
"VALUES (:id,:name, :course)");
for (int i = 0; i < strListStdName.size(); i++)
{
mySqlQuery.bindValue(":id",i); //! 加入主键
mySqlQuery.bindValue(":name", strListStdName[i]); //! 向绑定值里加入名字
mySqlQuery.bindValue(":course", strListStdCourse[i]); //! 课程
mySqlQuery.exec(); //! 加入库中
}
//! 向表中插入1条数据
mySqlQuery.bindValue(0,3);
mySqlQuery.bindValue(1,"wang han");
mySqlQuery.bindValue(2,"Chinese");
mySqlQuery.exec();
//! 查找表中id >=1 的记录的id项和name项的值
mySqlQuery.exec("select * from student where id >= 0");
//! query.next()指向查找到的第一条记录,然后每次后移一条记录
QSqlRecord mySqlRec = mySqlQuery.record();
while(mySqlQuery.next())
{
//! 获取query所指向的记录在结果集中的编号
int nRowNum = mySqlQuery.at();
//! 获取每条记录中属性(即列)的个数
int nColumnNum = mySqlQuery.record().count();
//! 获取"name"属性所在列的编号,列从左向右编号,最左边的编号为0
int nFieldNo = mySqlQuery.record().indexOf("name");
nFieldNo = mySqlRec.indexOf("course");
//! 获取id属性的值,并转换为int型
int stud_id = mySqlQuery.value(0).toInt();
//! 获取name属性的值
QString stud_name = mySqlQuery.value(1).toString();
//! 获取course属性的值
QString stud_course = mySqlQuery.value(2).toString();
//! 输出结果
qDebug() << nRowNum << nColumnNum << nFieldNo << stud_id << stud_name << stud_course;
}
//! 定位到结果集中编号为2的记录,即第三条记录,因为第一条记录的编号为0
qDebug() << "exec seek(2) :";
if(mySqlQuery.seek(2))
{
qDebug() << "rowNum is : " << mySqlQuery.at()
<< " id is : " << mySqlQuery.value(0).toInt()
<< " name is : " << mySqlQuery.value(1).toString();
}
//! 定位到结果集中最后一条记录
qDebug() << "exec last() :";
if(mySqlQuery.last())
{
qDebug() << "rowNum is : " << mySqlQuery.at()
<< " id is : " << mySqlQuery.value(0).toInt()
<< " name is : " << mySqlQuery.value(1).toString();
}
//! 修改表内容
mySqlQuery.exec("update student set course = 'Chinese' where id = 1");
mySqlQuery.exec("alter table student add score int");
mySqlQuery.exec("alter table student alter column score vchar(20)");
//! 删除表内容
//mySqlQuery.exec("delete from student where id = 1");
return a.exec();
}