SQLite数据库的操作及语法

连接数据库:
QSqlDatabase db;
db = QSqlDatabase::addDatabase("QSQLITE", "sqlite1");// 驱动类型,连接名(默认)
db.setDatabaseName("DbData/data.db");
db.setHostName("localhost.");
db.setUserName("root");
db.setPassword("123456");
m_DbState = db.open();
db.connectionName() //sqlite1
db.databaseName() //DbData/data.db

获取数据库所有表:
QSqlQuery db_query(db);
QStringList tables = db.tables(); // 获取所有表格的名称

获取表结构:
QSqlQuery query(db);
QString infoStr = QString("PRAGMA table_info(student)");
query.prepare(infoStr);
while(query.exec()){
	while (query.next()) {
		QString index = db_query.value(0).toString();
        QString name = db_query.value(1).toString();
        QString type = db_query.value(2).toString();
	}
}

删除数据库对象
QSqlDatabase::removeDatabase(db.connectionName());

删除数据库文件
QFile::remove(db.databaseName());

创建数据表:
QSqlQuery query(db);
QString infoStr = QString("create table InfoTable(PartNum varchar(64) primary key,"
	"MerchandiseName varchar(32),MerchandiseMarque varchar(32),"
	"MerchandiseUnit varchar(32),OutPrice double,"
	"MerchandiseType varchar(32), Quantity int,Amount double)");
query.prepare(infoStr);
QString str ="CREATE TABLE student (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,age INTEGER NOT NULL check(age > 0), qq CHAR(15) NOT NULL UNIQUE, phone INTEGER DEFAULT  10086)"
成功打印:db_query.lastQuery()
失败打印:db_query.lastError().text()

插入数据:
QSqlQuery query(db);
QString str = QString("insert into InfoTable values(?,?,?,?,?,?,?,?)");
query.prepare(str);
query.bindValue(0, info.PartNum);
query.bindValue(1, info.MerchandiseName);
query.bindValue(2, info.MerchandiseMarque);
query.bindValue(3, info.MerchandiseUnit);
query.bindValue(4, info.OutPrice);
query.bindValue(5, info.MerchandiseType);
query.bindValue(6, info.Quantity);
query.bindValue(7, info.Amount);
也可以用:
QString str = QString("INSERT INTO student (id,name,age,qq,phone) VALUES (%1,'%2',%3,'%4',%5)").arg(id).arg(name).arg(age).arg(qq).arg(phone);

查询数据:
QSqlQuery query(db);
QString str = QString("select * from InfoTable");
query.prepare(str);
QString str = QString("SELECT id,name,age,qq,phone FROM student  ORDER BY id ASC");
ORDER BY id ASC升序,降序时使用DESC

清空数据表内容:
QSqlQuery query(db);
QString str = QString("delete from InfoTable");
query.prepare(str);

删除表:
QString str = QString("DROP TABLE IF EXISTS student");

删除某一数据:
QSqlQuery query(db);
QString str = "delete from InfoTable where PartNum=?";
query.prepare(str);
query.addBindValue(id);

更新数据表:
QSqlQuery query(db);
QString str = "update InfoTable set MerchandiseName =?,MerchandiseMarque=?,"
	"MerchandiseUnit=?,OutPrice=?,MerchandiseType=?,Quantity=?, Amount=? where PartNum =?";
query.prepare(str);
query.addBindValue(info.MerchandiseName);
query.addBindValue(info.MerchandiseMarque);
query.addBindValue(info.MerchandiseUnit);
query.addBindValue(info.OutPrice);
query.addBindValue(info.MerchandiseType);
query.addBindValue(info.Quantity);
query.addBindValue(info.Amount);
query.addBindValue(info.PartNum);

增加列:
QSqlQuery db_query(db);
QString str = "ALTER TABLE student ADD age INTEGER";
query.prepare(str);

计算行数:QString str = "SELECT count(*) FROM student";
计算某列最大值:QString str = "SELECT max(id) FROM student";
计算某列最小值:QString str = "SELECT min(id) FROM student";
计算某列平均值:QString str = "SELECT avg(age) FROM student";
计算某列总和:QString str = "SELECT sum(age) FROM student";

通配符 LIKE和GLOB:
QString str = QString("SELECT *FROM student WHERE name LIKE '李%'";%)代表零个、一个或多个数字或字符
QString str = QString("SELECT *FROM student WHERE name LIKE '李_'";
(_)代表一个单一的数字或字符
QString str = QString("SELECT *FROM student WHERE name GLOB '李*'";*)代表零个、一个或多个数字或字符
QString str = QString("SELECT *FROM student WHERE name GLOB '李?'";?)代表一个单一的数字或字符

限定行Limit:Limit 提取的行数 Offet 从第一行开始跳过多少行
QString str = QString("SELECT * FROM student LIMIT %1 OFFSET %2".arg(2).arg(1);
跳过第一行后取两行

升序降序:
QString str = QString("SELECT * FROM student ORDER BY DESC";降序
QString str = QString("SELECT * FROM student ORDER BY ASC";升序

去除:
QString str = QString("SELECT DISTINCT name FROM student";

你可能感兴趣的:(Qt,qt)