前期准备:
在.pro文件中添加 QT +=sql(如果是vs+Qt联合编程,需要在创建项目时勾选SQL,或者在创建后Qt Project Settings中设置)
引入头文件:#include < QSqlDatabase > 和 #include < QSqlQuery>
连接access数据库:
SqlDatabase db;
db = QSqlDatabase::addDatabase("QODBC");
QString dbname = "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=" QCoreApplication::applicationDirPath() + "//test.mdb";
db.setDatabaseName(dbname);
基本操作:
增:(两种方法适用于其他操作)
QSqlQuery query;
QString sqlstr = "insert into point values(?,?,?)";//?是占位符query.prepare(sqlstr);
query.bindValue(0, x);
query.bindValue(1, y);
query.bindValue(2, z)query.exec();//prepare用于准备含?的语句,exec用于执行
或者
QSqlQuery query;
QString sqlstr = "insert into point values(1,2,3)";
query.exec(sqlstr);
删:
QSqlQuery query;
QString sqlstr = " delete from point where x=1";
query.exec(sqlstr);
改:
QSqlQuery query;
QString sqlstr = " update point set z=2,y=2 where x=1";
query.exec(sqlstr);
查:
QSqlQuery query;
QString sqlstr = " select * from point where x>10";
query.exec(sqlstr);
遍历数据库中的内容:
首先要补充引用一些头文件:#include < QTextStream>、#include < QStringList>、#include < QSqlIndex>、#include < QSqlRecord>、#include < QtDebug>、#include < QSqlError>
具体代码如下:
QString out_str;
QTextStream out(stdout);
QSqlError err;
QSqlRecord record;
if (db.open()) {
qDebug() << "link successful!";
//读数据库中的表
QStringList tables;//所有的表名
QString tabName,sqlString;
tables = db.tables(QSql::Tables);
//读表中记录
for (int i = 0; i < tables.size(); ++i){
tabName = tables.at(i);
qDebug()<<tabName;
sqlString = "select * from " + tabName;//sql语句
QSqlQuery q;
q.exec(sqlString);
QSqlRecord rec = q.record();//视图中所包含的所有记录
int fieldCount = rec.count();//字段的数量
qDebug() << "Number of columns: " << fieldCount;//每条记录所含的字段
QString fieldName;//字段的名称
for(int i=0;i<fieldCount;i++){
fieldName = rec.fieldName(i);
out<<fieldName<<"\t";
}
out<<endl;
while(q.next()){
for(int i=0;i<fieldCount;i++){
out<<q.value(i).toString();
out<<"\t";
}
out<<endl;
}
}