SQLite简介
SQLite是一个进程内的轻量级嵌入式数据库,它的数据库就是一个文件,实现了自给自足、无服务器、零配置的、事务性的SQL数据库引擎。它是一个零配置的数据库,这就体现出来SQLite与其他数据库的最大的区别:SQLite不需要在系统中配置,直接可以使用。且SQLite不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite可直接访问其存储文件。
SQLite对于其他数据库有什么优势:
-
不需要配置,不需要安装和管理
-
不需要一个单独的服务器进程或操作的系统(无服务器的)
-
一个完整的SQLite数据库存储在一个单一的跨平台的磁盘文件上
-
SQLite是非常小的,轻量级的数据库,完全配置时小于400KiB,省略可选功能配置时小于250KiB
-
SQLite是一个自给自足的数据库,这也就意味着不需要任何外部的依赖
Qt中的实际使用
首先在项目中的后缀为.pro文件中加入QT += sql //数据库模块
接着在要使用的.h文件中加入一下头文件
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlDriver>
#include <QSqlRecord>
#include <QSqlError>
然后就可以使用sql的接口函数了
为了方便多个文件调用使用访问数据库,可以对数据库的使用进行封装:
第一步:
方法一:创建或打开数据库
bool MainWindow::create_open_database()
{
//数据库类型QSQLITE
db=QSqlDatabase::addDatabase("QSQLITE");
//设备编号-“easybook-3313b0”
db.setHostName("easybook-3313b0");
//数据库的文件名字
db.setDatabaseName("MyDataBase.db");
//数据库用户名
db.setUserName("jons");
//数据库密码
db.setPassword("123123");
//判断是否成功打开
if(!db.open())
{
qDebug()<<"open database is error!";
return false;
}else
return true;
}
方法二:创建或打开数据库
bool MainWindow::create_open_database()
{
if (QSqlDatabase::contains("easybook-3313b0"))
{
db = QSqlDatabase::database("easybook-3313b0");
}
else
{
//建立和SQlite数据库的连接
db = QSqlDatabase::addDatabase("QSQLITE");
db.setHostName("easybook-3313b0");
//设置数据库文件的名字
db.setDatabaseName("MyDataBase.db");
db.setUserName("jons");
db.setPassword("123123");
}
if(!db.open())
{
qDebug()<<"open database is error!";
return false;
}else
return true;
}
第二步:创建数据库中的表
bool MainWindow::create_tabel()
{
QSqlQuery query(db);
bool success = query.exec("create table student(id int primary key,name varchar,sex varchar,address int)");
if(success)
qDebug()<<"create student tabel is success!";
else
qDebug()<<"create student tabel is error!";
query.exec("select * from student");
QSqlRecord rec = query.record();
qDebug()<<"student 的表字段数"<<rec.count();
}
第三步:数据库的基本操作,增删改查
//插入:
bool MainWindow::insert_data()
{
bool success;
QSqlQuery query(db);
query.prepare("insert into student values(?,?,?,?)");
query.bindValue(0,select_tablecount());
query.bindValue(1,ui->lineEdit->text());
query.bindValue(2,ui->lineEdit_2->text());
query.bindValue(3,ui->lineEdit_3->text());
success=query.exec();
if(success)
qDebug()<<"insert student msg is success!";
else
qDebug()<<"insert student msg is error!"<<query.lastError().driverText();
}
//删除:
bool MainWindow::detele_tablemag()
{
QSqlQuery query(db);
query.exec(QString("delete from student where address=%1" ).arg(ui->lineEdit_5->text()));
if(!query.exec())
qDebug()<<"delete student msg is error!"<<query.lastError();
else
qDebug()<<"delete student msg is success";
}
//修改:
bool MainWindow::update_tablemsg()
{
bool success;
QSqlQuery query(db);
query.prepare(QString("update student set name=?,sex=?,address=? where address =%1").arg(ui->lineEdit_4->text()));
query.bindValue(0,ui->lineEdit->text());
query.bindValue(1,ui->lineEdit_2->text());
query.bindValue(2,ui->lineEdit_3->text());
success=query.exec();
if(success)
qDebug()<<"update student msg is success!";
else
qDebug()<<"update student msg is error!"<<query.lastError().driverText();
}
//查询:
bool MainWindow::select_tablemsg()
{
QSqlQuery query(db);
query.exec("select * from student");
if(!query.exec())
qDebug()<<"select student msg is error!"<<query.lastError();
else
{
while(query.next())
{
int id =query.value(0).toInt();
QString name=query.value(1).toString();
QString sex=query.value(2).toString();
int address=query.value(3).toInt();
ui->listWidget->addItem(QString("id%1 name:%2 sex:%3 address%4").arg(id).arg(name).arg(sex).arg(address));
}
}
//其他:
//排序:
bool MainWindow::table_sort()
{
QSqlQuery query(db);
query.exec("select * from student order by id desc");
}
//查询数据表的行数:
int MainWindow::select_tablecount()
{
int count=0;
QSqlQuery query(db);
query.exec("select * from student");
if(!query.exec())
{
qDebug()<<"select student msg is error!"<<query.lastError();
}
else
{
while(query.next())
{
count++;
}
}
return count;
}
案例截图:
最后:案例源码