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();