Qt中SQLQSqlQuery对象中prepare()函数的⽤法
中利⽤SQL对的操作和prepare()函数的使⽤
Qt数据库的初学说明
Qt中可以建⽴⼀个数据库,⽐如:QSqlDatabase db;这是⼀个数据库对象db,在操作之前我们需要⽤QSQLITE去驱动它链接
它,db=QSqlDatabase::addDatabase("QSQLITE");然后可以设置他的名字db.setDatabaseName(“”),再到后⾯我们可以打开它db.open(),打开成功后我们可以对他进⾏某些操作⽐如查询:那么⼜像
对⽂件操作⼀样,我们得新建⼀个QSqlQuery Sql对象,然后他负责对数据库的所有操作!包括读,写,删除,添加等等。
QT中的SQL中QQuery对象对数据库操作分为两步,先是⽤prepare()函数准备,然后调⽤exec()函数去执⾏,执⾏结果就是该函数的返回值。
有关数据库的更多操作在下⾯的链接中都有给出
由于SQL语法⼤部分都是在prepare()中实现的,下⾯主要说明prepare()的⽤法!和标准的SQL还是有区别的
Qt中prepare()⽤法:
说明:为什么需要要绑定:这是因为在prepare()中虽然是标准的SQL指令,但是对于具体的数值类的量不可能在string表⽰出来,那么不能表⽰的量就⽤?代替,这样就需要额外添加绑定指令addBindValue(),把prepare()中⽤?表⽰的量替换成相对应的数值量
(int,floaat,QString等等),⽽且替换是是按照?出现顺序替换的,然后在执⾏exec()时就可以更新到数据库中
或者可以⽤:string⽽不⽤?(string就代表⼀个字符串⽽已),这时我们可以⽤bindValue(“:string”,value);去绑定数据单,然后更新,这个就可以不按照出现顺序绑定。但是:string⼀定是和它要替换的列的值对应的。⽽且绑定还可以省略,也就是设为NULL。
创建表:
”CREATE TABLE Table_Name (item1 int,item2 varchar(30),item3float,……)“
说明:Table_Name是你要建的表的名字,item1,item2.等等表⽰表中的列,每个item后⾯的表⽰该列数据性质。注意括号⾥不可为空,因为空表是不可以创建成功的。
例如:sql_query.prepare("CREATETABLEPersons1(id int,name varchar(30),slary int,ageint)");
在表中插⼊新⾏
“INSERT INTO Table_Name(item1,) VALUES (:id,:name,:)”
在使⽤prepare()函数后,我们还得使⽤addBindValue(value)按照上⾯的item顺序来绑定值,具体值为value(该值⼀定要和对应的item想对应)绑定成功后调⽤exec()就可以执⾏插⼊操作,写⼊数据库,成功与否就看exec()返回值了。
例如:⽤第⼀种⽅法绑定
sql_query.prepare("INSERTINTOPersons(id,name,slary)VALUES(?,?,?)");
sql_query.addBindValue(2);
sql_query.addBindValue("taopeng");
sql_query.addBindValue(25);
if(())
或者:第⼆种⽅法:
sql_query.prepare("INSERTINTOPersons(id,name,age)VALUES(:id,:name,:bbb)");
sql_query.bindValue(":id",4);
sql_query.bindValue(":name","taopeng");
sql_query.bindValue(":bbb",25);
:bbb其实不重要,只不过是相当与⼀个标识符,⽽age,或者name这些是⽐较重要的,他们指定了插⼊的列。
更新
“UPDATE Table_Name SET item1= ?,item2 =? WHERE id = ?”
同样也是绑定
例如:
sql_query.prepare("UPDATEPersonsSETage=?,name=?WHEREid=?");
sql_query.addBindValue(18);
sql_query.addBindValue("taoxiaopeng");
sql_query.addBindValue(1);
();
或者:
sql_query.prepare("UPDATEPersonsSETage=:age,name=:hahaWHEREid=:hehe");
sql_query.bindValue(":age",18);
sql_query.bindValue(":haha","taoxiaopeng");
sql_query.bindValue(":hehe",4);
();
删除
“DELETE FROM Table_Name Whereitem = ?”
“DELETE FROM Table_Name Whereitem = :item”
例如:
sql_query.prepare("DELETEFROMPersonsWHEREid=:hehe");
//sql_query.bindValue(":age",30);
//sql_query.bindValue(":haha","taoxiaopeng");
sql_query.bindValue(":hehe",4);
或者
sql_query.prepare("DELETEFROMPersonsWHEREid=?");
/
/sql_query.bindValue(":age",30);
//sql_query.bindValue(":haha","taoxiaopeng");
sql_query.addBindValue(3);
sql中delete用法//sql_query.bindValue(":hei",18);
AND 和OR
这个主要⽤在WHERE中指定查表或者删除时的条件。
查询选取
SELECT * FROM Table_Name // 选取所有列
SELECT item,item1,item2 FROMTable_Name//选取item,item1,item2这些列。
⽽读取结果可以⽤value()函数读取,参数可以是QString :”item”,”item1”,或者是整型数据,整型数据表⽰该列是表中的第⼏列(从0开始)。
例如:
sql_query.prepare("SELECT*FROMPersons");
if(())
{
qDebug()<<"readsuccessfully";
(())
{
int id=sql_query.value("id").toInt();
qDebug()<<"id:"<<id;
QString name=sql_query.value("name").toString();
qDebug()<<"name:"<<name;
int salary=sql_query.value("slary").toInt();
qDebug()<<"salary:"<<salary;
int age=sql_query.value("age").toInt();
qDebug()<<"age:"<<age;
}
}
else
{
qDebug()<<"insertfailed";
}
注意:为了显⽰每⼀个条⽬⽤了while(()),因为第⼀次读出来sql_query是指在⼀个空的地区,不是表中第⼀个条⽬。所以⽤next()可以正确显⽰。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论