【Qt】Qt操作sqlite数据库-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

QT操作sqlite数据库语句与mysql数据库雷同这里不再赘述请参考【QT-2】Qt连接及操作MySql数据库_qt连接mysql数据库-CSDN博客

sqlite数据库使用

QSqlQuery sql_qurey;
//添加驱动
database = QSqlDatabase::addDatabase("QSQLITE");
database.setDatabaseName("../3dvisionServer/project.db");
sql_qurey = QSqlQuery::QSqlQuery(database);
if (!database.open())
{
	qDebug() << "Error:Failed to connect database!" << database.lastError();
}
else
{
	qDebug() << "Link sucess!";
}

1、判断数据库中是否存在表

//project_conf为表名
bool isTableExist = sql_qurey.exec(QString("select * from project_conf"));
//返回true则表存在反之表不存在
qDebug() << isTableExist;

2、QSqlQuery提供的常用方法

Qt对数据库的操作是通过QSqlQuery实现的它可返回所有的执行结果。

next()指向下一条记录每执行一次该函数便指向相邻的下一条记录

previous()指向上一条记录每执行一次该函数便指向相邻的上一条记录

record()获得现在指向的记录

first()指向结果集的第一条记录

last()指向结果集的最后一条记录

seek(int n)query指向结果集的第n条记录

value(int n)获得属性值其中n代表查询第n个属性或者value("列名")

query.record().count()获取每条记录中属性即列的个数

特别注意将next()放在循环内查询的记录从第二条开始。

3、在实践过程中的错误解决

错误1

QSqlQuery::exec: database not open
Error: Failed to create table! QSqlError("", "Driver not loaded", "Driver not loaded")

解决

// 添加以下语句
sql_qurey = QSqlQuery::QSqlQuery(database);

错误2

Error: Failed to create table! QSqlError("1", "Unable to execute statement", "AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY")

错误代码

QString sql_result = "create table result(result_id int PRIMARY KEY AUTOINCREMENT, result_silo_id int,\
		result_max varchar,result_min varchar, result_mean varchar, result_vol varchar, result_pervol varchar,\
		cloud_x varchar, cloud_y varchar, cloud_z varchar, datetime varchar)";

解决

使用关键字AUTOINCREMENT必须满足

1、只能用于整型INTEGER字段INT类型不可行

2、只能用于PRIMARY KEY字段。

正确写法

QString sql_result = "create table result(result_id INTEGER PRIMARY KEY AUTOINCREMENT, result_silo_id int,\
		result_max varchar,result_min varchar, result_mean varchar, result_vol varchar, result_pervol varchar,\
		cloud_x varchar, cloud_y varchar, cloud_z varchar, datetime varchar)";

错误2

QSqlQuery::value: not positioned on a valid record

错误代码

QString sql_select = QString("select pro_id from project_conf where pro_name = '" + pro_name + "'");

qDebug() << sql_select;
if (sql_qurey.exec(sql_select))
{
	quint16 data = sql_qurey.value(0).toInt();
	qDebug() << data;     
}   

解决

QSqlQuery返回的数据集record是停在第一条记录之前。因此获得数据集后必须执行next()或first()到第一条记录这时record才有效。

正确写法

QString sql_select = QString("select pro_id from project_conf where pro_name = '" + pro_name + "'");

qDebug() << sql_select;
if (sql_qurey.exec(sql_select))
{
    //或者采用 if(sql_query.next()) 
	if (sql_qurey.first())
	{
		quint16 data = sql_qurey.value(0).toInt();
        //或者通过下面的写法
        quint16 data = sql_qurey.value(""site_id"").toInt();
		qDebug() << data;
    }
}
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: 数据库