转自:http://blog.csdn.net/reborntercel/article/details/6991147
#include
QT += sql
QSqlDatabase类实现了数据库连接的操作
QSqlQuery类执行SQL语句
QSqlRecord类封装数据库所有记录
QSqlDatabase类
-
QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
-
db.setHostName("localhost");
-
db.setDatabaseName("scott");
-
db.setUserName("stott");
-
db.setPassword("tiger");
-
db.open();
-
db.close();
建立数据库文件
-
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
-
db.setDatabaseName("database.db");
-
if (!db.open())
-
{
-
qDebug("数据库不能打开");
-
}
-
return false;
-
QSqlQuery query;
-
query.exec("create table student(id INTEGER PRIMARY KEY autoincrement,
-
name nvarchar(20), age int)");
-
query.exec("insert into student values(1,'小明', 14)");
-
query.exec("insert into student values(2,'小王',15)");
QSqlQuery类
插入值到数据库操作
一、直接用SQL语句插入(参照上面)
二、利用预处理方式插入(ORACLE语法和ODBC语法)
适合插入多条记录,或者避免将值转换成字符串(即正确地转义),调用prepare()函数指定一个包含占位符的query,然后绑定要插入的值
ORACLE语法
-
QSqlQuery query;
-
query.prepare("INSERT INTO T_STUDENT (name, age) VALUES (:name, :age)");
-
query.bindValue(":name", "小王");
-
query.bindValue(":age", 11);
-
query.exec();
ODBC语法
-
QSqlQuery query;
-
query.prepare("INSERT INTO T_STUDENT (name,age) VALUES (?,?)");
-
query.addBindValue("小王");
-
query.bindValue(11);
-
query.exec();
三、批量插入到数据库中
-
QSqlQuery query;
-
query.prepare(“insert into student values (?, ?)”);
-
QVariantList names;
-
names << "小王" << "小明" << "小张" << "小新";
-
query.addBindValue(names);
-
QVariantList ages;
-
ages << 11 << 13 << 12 << 11;
-
query.addBindValue(ages);
-
if (!q.execBatch())
-
qDebug() << q.lastError();
查询数据库操作
-
QSqlQuery query;
-
query.exec("SELECT * FROM t_STUDENT");
-
while (query.next())
-
{
-
QString name = query.value(0).toString();
-
int age = query.value(0).toInt();
-
-
}
seek(int n) :query指向结果集的第n条记录。指定当前的位置
first() :query指向结果集的第一条记录。
last() :query指向结果集的最后一条记录。
next() :query指向下一条记录,每执行一次该函数,便指向相邻的下一条记录。
previous() :query指向上一条记录,每执行一次该函数,便指向相邻的上一条记录。
record() :获得现在指向的记录。
value(int n) :获得属性的值。其中n表示你查询的第n个属性
int rowNum = query.at(); //获取query所指向的记录在结果集中的编号
int fieldNo = query.record().indexOf(“name”); //返回"name"的列号
int columnNum = query.record().count(); //获取每条记录中属性(即列)的个数
事务操作
操作函数:transaction(),commit()提交,rollback()回滚
操作事务前,先判断该数据库是否支持事务操作。hasFeature是QSQLDriver类函数
-
if (QSqlDatabase::database().driver()->hasFeature(QSqlDriver::Transactions)){ ... }
插入一条记录,然后提交事务
-
QSqlDatabase::database().transaction();
-
QSqlQuery query;
-
query.exec("SELECT id FROM T_STUDENT WHERE class=1");
-
if (query.next())
-
{
-
query.exec("INSERT INTO T_STUDENT (id,name,age) VALUES (3,'小李',13)");
-
}
-
QSqlDatabase::database().commit();
阅读(31218) | 评论(0) | 转发(3) |