SQL的使用----QT环境下sqlite3常用的数据库操作函数

需要调用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();
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值