创建表格语句:create table <table_name> (f1 type1, f2 type2,…);
create table是创建表格的语句,也可用大写CREATE TABLE;student是表格的名称,可以任意取;括号中是表格的格式,上述指令表明,表格中有三列,第一列的名称(表头)是id,这一列储存的数据类型是int,第二列名称是name,数据类型是字符数组,最多有30个字符(和char(30)的区别在于,varchar的实际长度是变化的,而char的长度始终是给定的值),第三列的名称是age,数据类型是int。
如果sql_query.exec()执行成功,则创建表格成功。
例2:插入数据
在刚才创建的表格中,插入一行数据。
QString insert_sql = "insert into student values (?, ?, ?)"; sql_query.prepare(insert_sql); sql_query.addBindValue(max_id+1); sql_query.addBindValue("Wang"); sql_query.addBindValue(25); if(!sql_query.exec()) { qDebug() << sql_query.lastError(); } else { qDebug() << "inserted Wang!"; } if(!sql_query.exec("INSERT INTO student VALUES(3, \"Li\", 23)")) { qDebug() << sql_query.lastError(); } else { qDebug() << "inserted Li!"; }
插入语句:insert into <table_name> values (value1, value2,…);
insert into是插入语句,student是表格名称,values()是要插入的数据。这里,我们插入了2组数据。插入第一组数据的时候,用addBindValue来替代语句中的?,替代的顺序与addBindValue调用的顺序相同。插入第二组数据的时候,则是直接写出完整语句。
例3:更新数据(修改数据)
QString update_sql = "update student set name = :name where id = :id"; 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!"; }
语句:update <table_name> set <f1=value1>, <f2=value2>… where <expression>;
更新(修改)的语句是update...set...,其中student是表格名称,name是表头名称(即第二列),:name是待定的变量,where用于确定是哪一组数据,:id也是待定变量。
bindValue(" ", " ")函数用来把语句中的待定变量换成确定值。
例4:查询数据
(1)查询部分数据
QString select_sql = "select id, name from student"; 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); } }
语句select <f1>, <f2>, ... from <table_name>;
select是查询指令;
QString select_all_sql = "select * from student"; 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>;
查询所有数据用 * 表示。用while(sql_query.next())用来遍历所有行。同样用value()获得数据。
(3)查询最大id
QString select_max_sql = "select max(id) from student"; int max_id = 0; sql_query.prepare(select_max_sql); if(!sql_query.exec()) { qDebug() << sql_query.lastError(); } else { while(sql_query.next()) { max_id = sql_query.value(0).toInt(); qDebug() << QString("max id:%1").arg(max_id); } }
这个就是在语句中用max来获取最大值。
例5:删除与清空
(1)删除一条数据