需要调用sqlite3的库文件
1.数据表的创建
void AJB_MacReportTable::AJB_CreateMacToSql(QString Table)
{
sql->db=sql->SqlInit(SQL_MACREPORT_DB_DIR,SQL_MACREPORT_FILE);
sql->SqlOpenDB(sql->db);
char mysql[500];
sprintf(mysql,"create table if not exists %s (" \
"id varchar primart key," \
"设备MAC varchar);",Table.toUtf8().data());
//qDebug()<<mysql;
sql->CreatTable(sql->db,mysql,Table);
sql->SqlCloseDB(sql->db);
}
``
2.数据表的删除
```cpp
void AJB_MacReportTable::AJB_DeleteMacFromSql(QString Table)
{
sql->db=sql->SqlInit(SQL_MACREPORT_DB_DIR,SQL_MACREPORT_FILE);
sql->SqlOpenDB(sql->db);
char mysql[300];
sprintf(mysql,"drop table %s;",Table.toUtf8().data());
sql->DeleteTableFromSql(sql->db,mysql,Table);
sql->SqlCloseDB(sql->db);
}
3.数据的插入
void AJB_MacReportTable::AJB_InsertMacToSql(QString Table,QString Mac)
{
sql->db=sql->SqlInit(SQL_MACREPORT_DB_DIR,SQL_MACREPORT_FILE);
sql->SqlOpenDB(sql->db);
char mysql[400];
sprintf(mysql,"insert into %s (id,设备MAC) "\
"values ('%d','%s');",Table.toUtf8().data(),0,Mac.toUtf8().data());
sql->InsertDatatoSql(sql->db,mysql,Table);
sql->SqlCloseDB(sql->db);
}
4.数据的查找
void AJB_MacReportTable::AJB_SelectMacFromSql(QString Table)
{
sql->db=sql->SqlInit(SQL_MACREPORT_DB_DIR,SQL_MACREPORT_FILE);
sql->SqlOpenDB(sql->db);
char mysql[100];
sprintf(mysql,"select * from %s;",Table.toUtf8().data());
sql->SelectDataFromSql(sql->db,mysql,Table,&PMacPutout->AJB_PutOutToFile,9);
sql->SqlCloseDB(sql->db);
}
5.数据的更新
void MacRecord::AJB_UpdateDataToMacStateTableSql(QString Table,QString ColumnName,QString Data,QString DeviceID)
{
sql->db=sql->SqlInit(SQL_MACRECORD_DB_DIR,SQL_MACRECORD_FILE);
sql->SqlOpenDB(sql->db);
char mysql[200];
//写对表进行添加数据操作的sql语句
sprintf(mysql,"update %s set %s = '%s' where 设备ID = '%s';",Table.toUtf8().data(),ColumnName.toUtf8().data(),Data.toUtf8().data(),DeviceID.toUtf8().data());
//qDebug()<<mysql;
sql->UpdateDataToSql(sql->db,mysql,Table);
sql->SqlCloseDB(sql->db);
}
sql的作函数
sql.h
explicit AJB_Sql(QObject *parent = nullptr);
AJB_Sql(pFun cbFun);
void SqlInit(pFun cbFun);
sqlite3 * SqlInit(QString DBDir,QString DBName);
sqlite3 * SqlInit(void);
sqlite3 * SqlInit(sqlite3 *db);
void CreatTable(sqlite3 *db,const char *sql,QString table);
void SelectDataFromSql(sqlite3 *db,const char *sql,QString table,pFun cbFun,AJB_U8 colum);
void InsertDatatoSql(sqlite3 *db,const char *sql,QString table);
void DeleteDataFromSql(sqlite3 *db,const char *sql,QString table);
void DeleteTableFromSql(sqlite3 *db,const char *sql,QString table);
void UpdateDataToSql(sqlite3 *db,const char *sql,QString table);
void SqlOpenDB(QString addr,sqlite3 *db);
void SqlOpenDB(sqlite3 *db);
void SqlCloseDB(sqlite3 *db);
sql.cpp
AJB_Sql::AJB_Sql(QObject *parent) : QObject(parent)
{
}
void AJB_Sql::CreatTable(sqlite3 *db,const char *sql,QString table)
{
int ret;
ret=sqlite3_exec(db,sql,NULL,NULL,NULL);
if(ret==SQLITE_OK)
{
qDebug()<<"创建数据表"<<table<<"成功";
}
else
{
qDebug()<<"创建数据表"<<table<<"失败"<<ret;
}
}
void AJB_Sql::DeleteTableFromSql(sqlite3 *db,const char *sql,QString table)
{
int ret;
ret=sqlite3_exec(db,sql,NULL,NULL,NULL);
if(ret==SQLITE_OK)
{
qDebug()<<"删除数据表"<<table<<"成功";
}
else
{
qDebug()<<"删除数据表"<<table<<"失败"<<ret;
}
}
void AJB_Sql::DeleteDataFromSql(sqlite3 *db,const char *sql,QString table)
{
int ret;
ret=sqlite3_exec(db,sql,NULL,NULL,NULL);
if(ret==SQLITE_OK)
{
qDebug()<<"删除数据"<<table<<"成功";
}
else
{
qDebug()<<"删除数据"<<table<<"失败"<<ret;
}
}
void AJB_Sql::SelectDataFromSql(sqlite3 *db,const char *sql,QString table,pFun cbFun,AJB_U8 colum)
{
sqlite3_stmt *stmt = NULL;
const char* column[50] = {NULL};
int s32Ret = sqlite3_prepare_v2( db, sql, strlen(sql), &stmt, NULL );
if ( s32Ret != SQLITE_OK)
exit( -1 );
qDebug()<<"select data from"<<table;
int index=0;
QString cc;
while( sqlite3_step( stmt ) == SQLITE_ROW )
{
int i;
for( i = 0;i < colum;i++)
{
column[i] = (const char*)sqlite3_column_text( stmt, i );
cbFun(table,index,i,column[i]);//调用回调函数
//qDebug()<<column[i];
}
index++;
}
}
void AJB_Sql::InsertDatatoSql(sqlite3 *db,const char *sql,QString table)
{
//执行sql语句
int rc = sqlite3_exec(db, sql, NULL, NULL, NULL);
if( rc != SQLITE_OK )
{
qDebug()<<"插入数据失败"<<table<<rc;
}
else
{
qDebug()<<"插入数据成功!"<<table;
}
}
void AJB_Sql::UpdateDataToSql(sqlite3 *db,const char *sql,QString table)
{
//执行sql语句
int rc = sqlite3_exec(db, sql, NULL, NULL, NULL);
if( rc != SQLITE_OK )
{
qDebug()<<"更新数据失败"<<table<<rc;
}
else
{
qDebug()<<"更新数据成功!"<<table;
}
}
void AJB_Sql::SqlInit(pFun cbFun)
{
CbAddDevice = cbFun;
}
sqlite3 * AJB_Sql::SqlInit(sqlite3 *db)
{
QString addr=SQL_MANGER_DB_DIR;
if( true == IsDirExist( addr ) )
{
qDebug() << "路径存在";
}
else
{
qDebug() << "路径不存在";
QDir tempdir;
if( true == tempdir.mkdir( addr ) )//若路径不存在则创建该路径
{
qDebug() << "路径创建成功";
}
else
{
qDebug() << "路径创建失败";
}
}
addr+=SQL_MANGER_DB_NAME;
sqlite3_initialize();
int Feedback = sqlite3_open(addr.toLatin1(), &db);
if( Feedback != SQLITE_OK )
{
qDebug()<<"设备管理数据库打开失败";
sqlite3_close(db);
sqlite3_shutdown();
exit(-1);//非正常退出!
}
qDebug()<<"设备管理数据库打开成功";
int s32Rc;
s32Rc=sqlite3_exec( db , "PRAGMA FOREIGN_KEYS=ON" , 0 , 0 , NULL );
if(s32Rc != SQLITE_OK)
{
qDebug()<<"PRAGMA FOREIGN_KEYS=ON";
//qDebug()<<"szErrMsg = %s \n"<<szErrMsg;
}
return db;
}
sqlite3 * AJB_Sql::SqlInit(QString DBDir,QString DBName)
{
sqlite3 *db;
QString addr=DBDir;
if( true == IsDirExist( addr ) )
{
qDebug() << "路径存在";
}
else
{
qDebug() << "路径不存在";
QDir tempdir;
if( true == tempdir.mkdir( addr ) )//若路径不存在则创建该路径
{
qDebug() << "路径创建成功";
}
else
{
qDebug() << "路径创建失败";
}
}
addr+=DBName;
sqlite3_initialize();
int Feedback = sqlite3_open(addr.toLatin1(), &db);
if( Feedback != SQLITE_OK )
{
qDebug()<<"设备管理数据库打开失败"<<addr;
sqlite3_close(db);
sqlite3_shutdown();
exit(-1);//非正常退出!
}
qDebug()<<"设备管理数据库打开成功"<<addr;
int s32Rc;
s32Rc=sqlite3_exec( db , "PRAGMA FOREIGN_KEYS=ON" , 0 , 0 , NULL );
if(s32Rc != SQLITE_OK)
{
qDebug()<<"PRAGMA FOREIGN_KEYS=ON";
//qDebug()<<"szErrMsg = %s \n"<<szErrMsg;
}
return db;
}
sqlite3 * AJB_Sql::SqlInit(void)
{
sqlite3 *db;
QString addr=SQL_MANGER_DB_DIR;
if( true == IsDirExist( addr ) )
{
qDebug() << "路径存在";
}
else
{
qDebug() << "路径不存在";
QDir tempdir;
if( true == tempdir.mkdir( addr ) )//若路径不存在则创建该路径
{
qDebug() << "路径创建成功";
}
else
{
qDebug() << "路径创建失败";
}
}
addr+=SQL_MANGER_DB_NAME;
sqlite3_initialize();
int Feedback = sqlite3_open(addr.toLatin1(), &db);
if( Feedback != SQLITE_OK )
{
qDebug()<<"设备管理数据库打开失败";
sqlite3_close(db);
sqlite3_shutdown();
exit(-1);//非正常退出!
}
qDebug()<<"设备管理数据库打开成功";
int s32Rc;
s32Rc=sqlite3_exec( db , "PRAGMA FOREIGN_KEYS=ON" , 0 , 0 , NULL );
if(s32Rc != SQLITE_OK)
{
qDebug()<<"PRAGMA FOREIGN_KEYS=ON";
//qDebug()<<"szErrMsg = %s \n"<<szErrMsg;
}
return db;
}
bool IsDirExist(QDir Dir)
{
QDir tempdir( Dir );
bool result;
if( tempdir.exists() )
{
result = true;
}
else
{
result = false;
}
return result;
}
void AJB_Sql::SqlOpenDB(QString addr,sqlite3 *db)
{
int Feedback = sqlite3_open(addr.toLatin1(), &db);
if( Feedback != SQLITE_OK )
{
qDebug()<<"设备管理数据库打开失败";
sqlite3_close(db);
sqlite3_shutdown();
exit(-1);//非正常退出!
}
}
void AJB_Sql::SqlOpenDB(sqlite3 *db)
{
QString addr=SQL_MANGER_DB_DIR;
addr+=SQL_MANGER_DB_NAME;
int Feedback = sqlite3_open(addr.toLatin1(), &db);
if( Feedback != SQLITE_OK )
{
qDebug()<<addr<<"打开失败";
sqlite3_close(db);
sqlite3_shutdown();
exit(-1);//非正常退出!
}
}
void AJB_Sql::SqlCloseDB(sqlite3 *db)
{
sqlite3_close(db);
sqlite3_shutdown();
}