- 系统: win10
- IDE: QT(Qt Quick)
前置要求
1.pro中增加
QT += sql
2.头文件:
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QVariant>
1.创建库
QSqlDatabase db;
if (QSqlDatabase::contains("firstDatabase"))
{
db = QSqlDatabase::database("firstDatabase");
}
else
{
//建立和sqlite数据的连接
db = QSqlDatabase::addDatabase("QSQLITE","firstDatabase");
}
//设置数据库文件的名字
QString dbname = "D:/MySqlite/test.db";
db.setDatabaseName(dbname);
2.创建表
QSqlQuery * sql = new QSqlQuery(db);
// if(db.tables().contains(strTableName))
// {
// cout<<"此表已经存在";
// }
//创建表
sql->exec(QString("create table '%1' (ID,Value)").arg(strTableName));
3.插入
/*插入*/
bool Sqlite::dbInsert(QSqlQuery *_sql)
{
_sql->prepare(QString("insert into '%1' values (?,?)").arg(strTableName));
_sql->bindValue(0,rand()%10);
_sql->bindValue(1,rand()%100);
_sql->exec();
if(!_sql->execBatch())
{
cout<<_sql->lastError();
}
return true;
}
4.更新
4.1.单个值修改
将ID为1的值改为字符串“str”;
/*更新*/
bool Sqlite::dbUpDate(QSqlQuery *_sql)
{
_sql->prepare(QString("update '%1' set Value=? where ID=?").arg(strTableName));
_sql->bindValue(0,1);
_sql->bindValue(1,"str");
_sql->exec();
return true;
}
4.2.多个值修改
_sql->prepare(QString("updata '%1' set Value=?,Name=? where ID=?").arg(strTableName));
_sql->bindValue(0,1);
_sql->bindValue(1,"str");
_sql->bindValue(2,"abc");
_sql->exec();
备注:如果更新语句中不指定where ID=?
,则会修改一整列。
5.删除
/*删除*/
bool Sqlite::dbDelete(QSqlQuery *_sql)
{
//删除ID为1的行
_sql->prepare(QString("delete from '%1' where ID=?").arg(strTableName));
_sql->bindValue(0,1);
_sql->exec();
return true;
}
6.新插入一列
sqlite没法一次性插入多列,如果需要插入多列则要写多条alter table '%1' add column 列名
语句。
bool Sqlite::dbInsertColumn(QSqlQuery *_sql)
{
_sql->exec(QString("alter table '%1' add column newColumn").arg(strTableName));
_sql->prepare(QString("insert into '%1' values (?)").arg(strTableName));
_sql->bindValue(0,1);
_sql->exec();
return true;
}
7.获取表的行数
输出该表内总行数
sql->exec(QString("select count(*) from '%1'").arg(strTableName));
sql->next();
cout<<sql->value(0).toInt();
注意
1.%1
字符串替换的时候要加上单引号'%1'
,可以避免字符串替换时包含特殊符号导致的错误;