标签:
----------------------------
http://blog.csdn.net/reborntercel/article/details/6991147
http://blog.csdn.net/fzu_dianzi/article/details/6959268
--------------------------------
需要说明,当刚执行完query.exec(“select * from student”);这行代码时,query是指向结果集以外的,我们可以利用query.next(),当第一次执行这句代码时,query便指向了结果集的第一条记录。当然我们也可以利用seek(0)函数或者first()函数使query指向结果集的第一条记录。但是为了节省内存开销,推荐的方法是,在query.exec(“select * from student”);这行代码前加上query.setForwardOnly(true);这条代码,此后只能使用next()和seek()函数。
 
 #include <QtSql>
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();  
 
 Qt之SQL数据库
标签:
原文地址:http://www.cnblogs.com/584709796-qq-com/p/5013679.html