获取具有字段名称的 SELECT 字段类型,并带有 MariaDB C++连接器

Get SELECT field type having the field name with MariaDB C++ connector

本文关键字:字段 MariaDB C++ 连接器 SELECT 获取 类型      更新时间:2023-10-16

我有一个MariaDB选择,它在通用C++类中处理。 我需要让选择字段类型在 FLOAT 或 DOUBLE 的情况下进行处理,但所有字段都由同一个函数处理。 举个例子:

std::string sqlwrap::operator [] (std::string field_name)
{
nflog ();
if (!_res || _type == sql_void || _type == sql_invalid)
return "";
std::string res;
try {
res = _store->getString(field_name);
} catch (sql::SQLException & e) {
logp (sys::e_debug, "SQL exception: "
<< e.what());
}
return res;
}

在这个函数中,我必须检查它是否是一个 FLOAT,然后更改"."(小数位(由","(某些欧洲国家的小数位(组成。

这可能是线路中的东西...

std::string sqlwrap::operator [] (std::string field_name)
{
nflog ();
if (!_res || _type == sql_void || _type == sql_invalid)
return "";
std::string res;
try {
res = _store->getString(field_name);
switch (_store->getFieldType(field_name)) {
case DOUBLE:
res = change_dots_by_comma(res);
break;
default:
}
} catch (sql::SQLException & e) {
logp (sys::e_debug, "SQL exception: "
<< e.what());
}
return res;
}

我知道有 FORMAT 函数,但我想知道我是否可以使用 MariaDB C++ 连接器获取带有字段名称的字段类型。 我不想在选择中使用格式。

使用适当的"区域设置"来获取"小数点"、"千位分隔符"等。 另请注意,MariaDB 的FORMAT()中有一个可选的语言环境参数。

有关列的架构信息:

SELECT * FROM information_schema.COLUMNS
WHERE table_schema = "database_name"
AND table_name = "table_name"
AND column_name = "column_name"

浮点数和十进制的示例:

CREATE TABLE `dec184` (
`d` decimal(18,4) DEFAULT NULL,
`d2` decimal(18,4) NOT NULL,
`dx` float DEFAULT NULL,
`dv` float DEFAULT NULL
)

从查询:

*************************** 2. row ***************************
TABLE_CATALOG: def
TABLE_SCHEMA: try
TABLE_NAME: dec184
COLUMN_NAME: d2
ORDINAL_POSITION: 2
COLUMN_DEFAULT: NULL
IS_NULLABLE: NO
DATA_TYPE: decimal
CHARACTER_MAXIMUM_LENGTH: NULL
CHARACTER_OCTET_LENGTH: NULL
NUMERIC_PRECISION: 18
NUMERIC_SCALE: 4
DATETIME_PRECISION: NULL
CHARACTER_SET_NAME: NULL
COLLATION_NAME: NULL
COLUMN_TYPE: decimal(18,4)
COLUMN_KEY: 
EXTRA: 
PRIVILEGES: select,insert,update,references
COLUMN_COMMENT: 
*************************** 3. row ***************************
TABLE_CATALOG: def
TABLE_SCHEMA: try
TABLE_NAME: dec184
COLUMN_NAME: dx
ORDINAL_POSITION: 3
COLUMN_DEFAULT: NULL
IS_NULLABLE: YES
DATA_TYPE: float
CHARACTER_MAXIMUM_LENGTH: NULL
CHARACTER_OCTET_LENGTH: NULL
NUMERIC_PRECISION: 12
NUMERIC_SCALE: NULL
DATETIME_PRECISION: NULL
CHARACTER_SET_NAME: NULL
COLLATION_NAME: NULL
COLUMN_TYPE: float
COLUMN_KEY: 
EXTRA: 
PRIVILEGES: select,insert,update,references
COLUMN_COMMENT: