• c++ SqliteCPP 使用-根据列名获取数据类型(3)


    这里需要在底层添加一个方法,暂时整理的数据类型如下:


    //根据字符串来判断数据列的类型
    int Statement::GetColumnFromColumnName(const char* strDataType)
    {
        std::string strTemp(strDataType);
        transform(strTemp.begin(), strTemp.end(), strTemp.begin(), ::toupper);

        std::string strArray[] = { "INT","INTEGER", "TINYINT", "SMALLINT", "MEDIUMINT", "BIGINT", "UNSIGNED BIG INT", "INT2", "INT8" };
        auto itrFind = find_if(strArray, strArray + _countof(strArray), [&](const std::string& _dataInfo)
        {
            return (_dataInfo.find(strTemp) != -1);
        });
        if (itrFind != strArray + _countof(strArray))
        {
            return 1;
        }

        std::string TextArray[] = { "CHARACTER(20)","VARCHAR(255)", "VARYING CHARACTER(255)", "NCHAR(55)", "NATIVE CHARACTER(70)", "NVARCHAR(100)", "TEXT", "CLOB" };
        auto itrTextFind = find_if(TextArray, TextArray + _countof(TextArray), [&](const std::string& _dataInfo)
        {
            return (_dataInfo.find(strTemp) != -1);
        });
        if (itrTextFind != TextArray + _countof(TextArray))
        {
            return 3;
        }

        std::string strBlobArray[] = { "BLOB" };
        auto itrBlobFind = find_if(strBlobArray, strBlobArray + _countof(strBlobArray), [&](const std::string& _dataInfo)
        {
            return (_dataInfo.find(strTemp) != -1);
        });
        if (itrBlobFind != strBlobArray + _countof(strBlobArray))
        {
            return 4;
        }

        std::string strRealArray[] = { "REAL","DOUBLE","DOUBLE PRECISION","FLOAT" };
        auto itrRealFind = find_if(strRealArray, strRealArray + _countof(strRealArray), [&](const std::string& _dataInfo)
        {
            return (_dataInfo.find(strTemp) != -1);
        });
        if (itrRealFind != strRealArray + _countof(strRealArray))
        {
            return 2;
        }

        //NUMERIC
        std::string strNumericArray[] = { "NUMERIC","DECIMAL(10,5)","BOOLEAN","DATE","DATETIME" };
        auto itrNumericFind = find_if(strNumericArray, strNumericArray + _countof(strNumericArray), [&](const std::string& _dataInfo)
        {
            return (_dataInfo.find(strTemp) != -1);
        });
        if (itrNumericFind != strNumericArray + _countof(strNumericArray))
        {
            
        }

        return 5;
    }


    //获取列类型
    int Statement::getColumnDataType(const char* apName)
    {
        const int index = getColumnIndex(apName);
        const char* strDataType = getColumnDeclaredType(index);

        return GetColumnFromColumnName(strDataType);
    }

  • 相关阅读:
    STM32与ZigBee技术在智能家居无线通信中的应用研究
    抗压能力弱怎么办?如何提高抗压能力?
    B043-JavascriptDOM&Ajax
    Java反序列化之CommonsCollections CC1链分析
    高并发缓存策略大揭秘:面试必备的缓存更新模式解析
    TC申请是否需要银行转账记录?
    Linux shell编程学习笔记5:变量命名规则、变量类型、使用变量时要注意的事项
    3. 吴恩达深度学习--初始化、正则化、梯度校验
    lintcode 125 · 背包问题(二)
    websocket学习笔记【springboot+websocket聊天室demo】
  • 原文地址:https://blog.csdn.net/u011269801/article/details/126207211