Sqlite命令行程序
创建数据表
CREATE TABLE 表名(列名1 类型 [约束],列名2 类型 [约束],...);
常用的类型
INT(整形) TEXT(字符串) REAL(浮点数)
常用的约束
PRIMARY KEY(主键):表示该列数据唯一,可以加快数据访问。
NOT NULL(非空):该列数据不能为空
删除数据表
DROP TABLE 表名
删除数据表实例
DROP TABLE testTable
1.向数据表中插入数据
INSERT INTO 表名 (列名1,列名2,...) VALUES(数值1,数值2,...);
如果要为表中所有列添加值,并且插入列的顺序和创建表的顺序相同,可以不需要在Sqlite查询中指定列名
INSERT INTO 表名 VALUES(数值1,数值2,...);
插入数据实例
INSERT INTO company (id,name,age,salary) VALUES(1001,'小乔‘,24,11000);
INSERT INTO company VALUES(1002,'大乔‘,26,14000);
2.从数据表删除数据
DELETE FROM 表名 WHERE 条件表达式;
注:可以没有where子句,但数据表的所有数据都将被删除;
如果有多个条件可以使用逻辑与(and)或逻辑或(or)连接
删除数据实例
DELETE FROM company WHERE id=1001;
DELETE FROM company WHERE address='成都' and salary<1000;
3.修改数据表中的数据
UPDATE 表名 SET 列名1=新数值,列名2=新数值,...,WHERE 条件表达式;
注:可以没有WHERE子句,但数据表的所有数据都将被修改;
"新数值"可以是一个常数,也可以是一个表达式。
修改数据实例
UPDATE company SET age=45 WHERE id=1001;
UPDATE company SET salary=salary+2000 WHERE age>=30 and age<=35;
4.查询数据表中的数据
SELECT 列名1,列名2,... FROM 表名;
SELECT 列名1,列名2,... FROM 表名 WHERE 条件表达式;
SELECT 列名1,列名2,... FROM 表名 WHERE 条件表达式 ORDER BY 列名 排序方式
注:ORDER BY 子句可以和WHERE子句配合使用,也可以单独使用;
注:排序方式 ASC------升序 DESC------降序
查询操作实例
SELECT * FROM company WHERE salary>10000 or salary<3500;
SELECT * FROM company ORDER BY id ASC;
代码如下:widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QSqlDatabase>
#include<QSqlQuery>
#include<QSqlError>
#include<QSqlQueryModel>
#include<QDebug>
#include<QMessageBox>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
private:
//创建数据库
void createDB();
//创建数据表
void createTable();
//查询
void queryTable();
private slots:
//插入
void on_insertButton_clicked();
//删除
void on_deleteButton_clicked();
//修改
void on_updateButton_clicked();
//排序
void on_sortButton_clicked();
void on_findButton_clicked();
private:
Ui::Widget *ui;
QSqlDatabase db;//建立和数据库连接
QSqlQueryModel model;//保存结果集
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include<QSqlQuery>
//实现增删改查操作
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
createDB();
createTable();
queryTable();
}
Widget::~Widget()
{
delete ui;
}
//创建数据库
void Widget::createDB()
{
//添加数据库驱动
db=QSqlDatabase::addDatabase("QSQLITE");
//设置数据库名字(文件名)
db.setDatabaseName("student.db");
//打开数据库
if(db.open()==true)
{
qDebug()<<"创建/打开数据库成功!";
}
else
{
qDebug()<<"创建/打开数据库失败!";
}
}
void Widget::createTable()
{
QSqlQuery query;
QString str=QString("CREATE TABLE student ("
"id INT PRIMARTY KEY NOT NULL,"
"name TEXT NOT NULL,"
"score REAL NOT NULL)");
if(query.exec(str)==false)
{
qDebug()<<str;
}
else {
qDebug()<<"创建数据表成功!";
}
}
void Widget::queryTable()
{
QString str=QString("SELECT * FROM student");
model.setQuery(str);
ui->tableView->setModel(&model);
}
//插入
void Widget::on_insertButton_clicked()
{
QSqlQuery query;
int id=ui->idEdit->text().toInt();
//错误提示
if(id==0)
{
QMessageBox::critical(this,"Error","ID输入不能为空!");
return;
}
QString name=ui->nameEdit->text();
//错误提示
if(name=="")
{
QMessageBox::critical(this,"Error","姓名输入错误!");
return;
}
double score=ui->scoreEdit->text().toDouble();
if(score<0 ||score>100)
{
QMessageBox::critical(this,"Error","成绩输入错误!");
return;
}
QString str=QString("INSERT INTO student VALUES(%1,'%2',%3)"
).arg(id).arg(name).arg(score);
if(query.exec(str)==false)
{
qDebug()<<str;
}
else
{
qDebug()<<"插入数据成功!";
queryTable();
}
}
//删除:根据id删除一条数据
void Widget::on_deleteButton_clicked()
{
QSqlQuery query;
int id=ui->idEdit->text().toInt();
QString str=QString("DELETE FROM student WHERE id=%1").arg(id);
//删除提醒
if (QMessageBox::question(this,"删除","确定要删除吗?",
QMessageBox::Yes|QMessageBox::No)==QMessageBox::No)
{
return;
}
if(query.exec(str)==false)
{
qDebug()<<str;
}
else
{
qDebug()<<"删除数据成功!";
queryTable();
}
}
//修改根据id修改成绩
void Widget::on_updateButton_clicked()
{
QSqlQuery query;
int id=ui->idEdit->text().toInt();
double score=ui->scoreEdit->text().toDouble();
QString str=QString("UPDATE student SET score=%1 WHERE id=%2").arg(score).arg(id);
if(query.exec(str)==false)
{
qDebug()<<str;
}
else
{
qDebug()<<"修改数据成功!";
queryTable();
}
}
//排序
void Widget::on_sortButton_clicked()
{
//获取排序列名
QString value=ui->valuecomboBox->currentText();
//获取排序方式
QString condition;
if(ui->condcomboBox->currentIndex()==0)
{
condition="ASC";//升序
}
else
{
condition="DESC";//降序
}
QString str=QString ("SELECT * FROM student ORDER BY %1 %2").arg(value).arg(condition);
//查询和显示
model.setQuery(str);
ui->tableView->setModel(&model);
}
void Widget::on_findButton_clicked()
{
//获取排序列名
int id =ui->idEdit->text().toInt();
QString str=QString ("SELECT * FROM student WHERE id=%1 ").arg(id);
//查询和显示
model.setQuery(str);
ui->tableView->setModel(&model);
}