1.pro文件里添加 sql 模块
QT += core gui sql
2.QSqlDatabase类
1.静态函数:addDatabase()函数,建立一个与数据库的连接实例
addDatabase (const QString &type, const QString &connectionName = QLatin1String(defaultConnection)) |
例:QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "accMasterComputer.db"); |
第一参数为数据库驱动类型如:MYSQL,QSQLITE,主要看自己数用什么数据库;
使用驱动程序类型和连接名称connectionName将数据库添加到数据库连接列表中。如果已经存在名为connectionName的数据库连接,则会删除该连接。
数据库连接由connectionName引用。将返回新添加的数据库连接。
如果类型不可用或无法加载,isValid()将返回false。
如果未指定connectionName,则新连接将成为应用程序的默认连接,并且随后对database()的调用(不带connection-name参数)将返回默认连接。如果此处提供了connectionName,请使用数据库(connectionName)检索连接。
2.连接函数 setDatabaseName(const QString &name)
setDatabaseName(const QString &name) | 将要连接的数据库名称设置为name。若要生效,必须在打开连接之前设置数据库名称 |
参数是你要连接的数据库名字
3.open()打开数据库
使用实例对象打开
例:
if(db.open())
{
QMessageBox::information(this,"提示","打开数据库成功");
}else{
QMessageBox::warning(this,"提示","打开数据库失败");
qDebug()<<db.lastError().text();
}
3.QSqlQuery 有两个重要的构造函数,平时我们也基本上就用这两种形式来构造 QSqlQuery 对象。
QSqlQuery::QSqlQuery(const QString &query = QString(), QSqlDatabase db = QSqlDatabase()):如果没有传入或者传入一个无效的 QSqlDatabase 对象,则使用默认的 QSqlDatabase;如果 query 不是空字符串,则会执行这个 query 的数据库操作。例如QSqlQuery query("SELECT * FROM user")
则就会使用默认的数据库连接执行查询操作,而 QSqlQuery query
则会使用默认的数据库连接创建一个 QSqlQuery 对象,但是不执行任何操作。
QSqlQuery::QSqlQuery(QSqlDatabase db):使用指定的数据库连接创建 QSqlQuery 对象,如果数据库连接无效,则使用默认的数据库连接,例如QSqlQuery query(getConnectionByName("MyConnection"))
查询操作与显示:
QSqlQuery sqlQuery(db);
sqlQuery.exec(“string”);
while (sqlQuery.next()) {
i += 1;
QString name = sqlQuery.value(0).toString();
QString salary = sqlQuery.value(1).toString();
qDebug() << name << salary;
}
sqlQuery.clear();
接下来是代码演示:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "hmi_log.rdbacc"); //设置连接的数据库类型以这个数据库的链接名称
db.setDatabaseName(path); //path为你要连接的数据库名称
//db = QSqlDatabase::database();
if(!db.isOpen())
{
if(db.open()){
//QMessageBox::warning(this,"提示","打开数据库成功");
}else{
//QMessageBox::warning(this,"提示","打开数据库失败");
qDebug() << "Error:" << db.lastError(); //失败就显示失败原因
}
}
QSqlQuery sqlQuery(db);
QString sSql = "SELECT RowCount,Text,Number,Time,Date,State,Category,ClassId,GroupId,ConnectName,GradeId FROM alarmLog_2 WHERE DATE BETWEEN '"+startTime+"' AND '"+endTime+"' ORDER BY Date ";
if(sqlQuery.exec(sSql)){ //exex执行查询语句
qDebug()<<"select yes";
}else{
qDebug()<<"selsect no";
qDebug() << "Error: " << sqlQuery.lastError(); //失败就打印失败原因
}
while (sqlQuery.next())
{
out<<sqlQuery.value(0).toString()+",";
out<<sqlQuery.value(1).toString()+",";
out<<sqlQuery.value(2).toString()+",";
out<<sqlQuery.value(3).toString()+",";
out<<sqlQuery.value(4).toString()+",";
out<<sqlQuery.value(5).toString()+",";
out<<sqlQuery.value(6).toString()+",";
out<<sqlQuery.value(7).toString()+",";
out<<sqlQuery.value(8).toString()+",";
out<<sqlQuery.value(9).toString()+",";
out<<sqlQuery.value(10).toString();
out<<"\n";
}//value(int)就是查询出来的每个字段