文章目录
- 一、windows下使用命令行方法操作db文件
- 1、 安装sqlite
- 2、 使用sqlite
- 二、QT操作sqlite
- 1、 建立数据库
- 2、 打开数据库
- 3 、关闭数据库
- 4、 创建数据表
- 5 、插入数据
- 6、 删除表数据
- 7、 修改表数据
- 8、 查询数据——遍历查询、条件查询
一、windows下使用命令行方法操作db文件
1、 安装sqlite
菜鸟教程学习sqlite网站
下载sqlite链接
2、 使用sqlite
.open xx.db //创建数据库或者有数据库直接打开
二、QT操作sqlite
1、 建立数据库
void SqliteOperator::CreatDb()
{
if(QSqlDatabase::contains("qt_sql_default_connection"))
{
db = QSqlDatabase::database("qt_sql_default_connection");
}
else
{
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("test.db");
db.setUserName("test");
db.setPassword("test");
}
}
- 建立数据库的第一步是要判断该数据库对象的连接是否已经存在,若已经存在则直接获取该对象即可。
- 每个数据库连接都存在一个连接名称,qt_sql_default_connection为默认连接名称,实际使用中,这个连接名称可以自己指定,指定方法为通过QSqlDatabase::addDatabase的第二个参数指定。第一个参数中的QSQLITE表示使用SQLite数据库。
- setDatabaseName用于指定数据库文件名
- setUserName setPassword设置用户名和密码可自定义,也可忽略
2、 打开数据库
bool SqliteOperator::OpenDb()
{
if(!db.open())
{
qDebug() << "Error: Failed to connect database." << db.lastError();
return false;
}
return true;
}
3 、关闭数据库
void SqliteOperator::CloseDb()
{
db.close();
}
4、 创建数据表
void SqliteOperator::CreateTable()
{
QSqlQuery sql_query;
QString creat_sql = "create table student (id int primary key, name varchar(30), age int)";
sql_query.prepare(creat_sql);
if(!sql_query.exec())
{
qDebug() << "Error: Fail to create table." << sql_query.lastError();
}
else
{
qDebug() << "Table created!";
}
}
- 对数据库进行操作需要用到QSqlQuery类,操作前必须定义一个对象。
- 创建表格语句:create table (f1 type1, f2 type2,…);
- QSqlQuery类在使用过程中有两种方式:(后边使用QSqlQuery类时等同)
直接把语句写在exec()中
sql_query.exec("create table student (id int primary key, name varchar(30), age int)");
分步写,利用prepare()函数,再使用exec()
5 、插入数据
void SqliteOperator::InsertData()
{
QString insert_sql = "insert into student values (?, ?, ?)";
QSqlQuery sql_query;
sql_query.prepare(insert_sql);
sql_query.addBindValue(GetMaxId() +1);
sql_query.addBindValue("Wang");
sql_query.addBindValue(25);
if(!sql_query.exec())
{
qDebug() << sql_query.lastError();
}
else
{
qDebug() << "inserted Wang!";
}
}
bool ok2=query.exec("INSERT INTO admintable ( adid, adpass ) VALUES ( '00001', '123' ),( '00002', '12345678' );");
6、 删除表数据
QSqlQuery query;
QString sql=QString("DROP TABLE admintable2");
if(query.exec(sql))
{
qDebug()<<"删除成功";
}
else
{
qDebug()<<"删除失败:"<<query.lastError().text();
}
delete ui;
7、 修改表数据
void SqliteOperator::UpdateData()
{
QString update_sql = "update student set name = :name where id = :id";
QSqlQuery sql_query;
sql_query.prepare(update_sql);
sql_query.bindValue(":name", "Qt");
sql_query.bindValue(":id", 1);
if(!sql_query.exec())
{
qDebug() << sql_query.lastError();
}
else
{
qDebug() << "updated!";
}
}
8、 查询数据——遍历查询、条件查询
遍历查询
void SqliteOperator::QueryAllData()
{
QString select_all_sql = "select * from student";
QSqlQuery sql_query;
sql_query.prepare(select_all_sql);
if(!sql_query.exec())
{
qDebug()<<sql_query.lastError();
}
else
{
while(sql_query.next())
{
int id = sql_query.value(0).toInt();
QString name = sql_query.value(1).toString();
int age = sql_query.value(2).toInt();
qDebug()<<QString("id:%1 name:%2 age:%3").arg(id).arg(name).arg(age);
}
}
}
- 查询部分 select , , … from <table_name>;
- 查询所有 select * from <table_name>;
条件查询
void SqliteOperator::QueryData()
{
QString select_sql = QString("select * from student where name = '%1' and (age = '%2' or age = '%3')")
.arg("Wang")
.arg(30)
.arg(25);
QSqlQuery sql_query;
if(!sql_query.exec(select_sql))
{
qDebug()<<sql_query.lastError();
}
else
{
while(sql_query.next())
{
int id = sql_query.value(0).toInt();
QString name = sql_query.value(1).toString();
qDebug()<<QString("id:%1 name:%2").arg(id).arg(name);
}
}
}