Qt操作sql数据库

时间:2022-02-14 10:57:17

Qt

使用QSqlDatabase代表数据库

使用QSqlQuery代表执行和查询的语句


第一步:创建和打开数据库

1使用SQLITE类型的数据库

m_Database = QSqlDatabase::addDatabase("QSQLITE"); 

2设置数据库的名字
m_Database.setDatabaseName(MACDB_FILENAME);

3打开数据库
m_Database.open()


第二步 创建table表

QSqlQuery sql_create(m_Database);

QString create_str="create table if not exits xxx_table_name(field1 interger,field2 varchar(32))"

sql_create.exec(create_str);


第三步执行插入。删除。查询语句

sql支持?来替代数据。也就是可以后续用数据替换疑问号。替换的函数是bind。准备好语句

QString macinfo_str="insert into "TABLE_NAME"("FIELD_MACADDR_NAME","\
FIELD_COMPANY_NAME","FIELD_ADDRESSDETAIL_NAME","FIELD_ADDRESS_NAME","FIELD_COUNTRY_INDEX") values (?,?,?,?,?)";

准备好操作对象

QSqlQuery sql_insert(m_Database);

准备语句

sql_insert.prepare(macinfo_str);

绑定对应的值

sql_insert.bindValue(0,pinfo->MacAddr);
sql_insert.bindValue(1,pinfo->Company);
sql_insert.bindValue(2,pinfo->AddressDetail);
sql_insert.bindValue(3,pinfo->Address);

sql_insert.bindValue(4,pinfo->Country);

执行插入

sql_insert.exec()

也就是QSqlQuery可以通过exec(语句)来直接执行。也可通过prepare(语句)执行bindValue绑定操作以后再执行。


第四步骤 查询

QString q_final="select * from "ALLEVENT_TABLE_NAME" where 1==1 "+q_other_condition;

sql_query.exec(q_final)

while(sql_query.next())
{
qlonglong eventuid=sql_query.value(ALLEVENT_FIELD_EVENTUID_INDEX).toLongLong();
QString devtypename=sql_query.value(ALLEVENT_FIELD_DEVTYPENAME_INDEX).toString();
QString companyname=sql_query.value(ALLEVENT_FIELD_COMPANYENNAME_INDEX).toString();

}


第五步 关闭数据库

m_Database.close()


在进行大量的插入删除或者查询语句的时候。每次都去操作数据库是很慢的。因此最关键的是使用事务机制

m_Database.transaction();

执行各种操作 插入 删除

//最后一次提交

m_Database.commit();