//connection.h
#ifndef CONNECTION_H
#define CONNECTION_H
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>
static bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
// db.setDatabaseName(":memory:");
db.setDatabaseName("/test1.db");
if (!db.open()) {
QMessageBox::critical(0, qApp->tr("Cannot open database"),
qApp->tr("Unable to establish a database connection."
), QMessageBox::Cancel);
return false;
}
QSqlQuery query;
query.exec("create table student (id int primary key, name varchar(20))");
//创建表student,如果student表已经存在则无动作
query.exec("insert into student values(0, 'first')");
query.exec("insert into student values(1, 'second')");
query.exec("insert into student values(2, 'third')");
query.exec("insert into student values(3, 'fourth')");
query.exec("insert into student values(4, 'fifth')");
return true;
}
#endif // CONNECTION_H
//main.cpp
#include <QtGui/QApplication>
#include "mainwindow.h"
#include"connection.h"
#include<QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
if (!createConnection())
return 1;
MainWindow w;
w.show();
return a.exec();
}
//mainwindow.cpp
void MainWindow::on_pushButton_clicked()
{
QSqlQuery query;
query.exec("select * from student");
QString str;
while(query.next())
{
qDebug() << query.value(0).toInt() << query.value(1).toString();
str=str+"\n"+query.value(1).toString();
ui->textEdit->setText(str);
}
}
void MainWindow::on_pushButton_2_clicked()
{
QSqlQuery query;
query.exec("select * from student");
qDebug() << "exec next() :";
if(query.next())
//开始就先执行一次next()函数,那么query指向结果集的第一条记录
{
int rowNum = query.at();
//获取query所指向的记录在结果集中的编号
int columnNum = query.record().count();
//获取每条记录中属性(即列)的个数
int fieldNo = query.record().indexOf("name");
//获取"name"属性所在列的编号,列从左向右编号,最左边的编号为0
int id = query.value(0).toInt();
//获取id属性的值,并转换为int型
QString name = query.value(fieldNo).toString();
//获取name属性的值
qDebug() << "rowNum is : " << rowNum //将结果输出
<< " id is : " << id
<< " name is : " << name
<< " columnNum is : " << columnNum;
}
qDebug() << "exec seek(2) :";
if(query.seek(2))
//定位到结果集中编号为2的记录,即第三条