c++ - 使用 MariaDB C++ 连接器获取具有字段名称的 SELECT 字段类型
问题描述
我有一个 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++ 连接器获取带有字段名称的字段类型。我不想在选择中使用 FORMAT。
解决方案
使用适当的“区域设置”来获取“小数点”、“千位分隔符”等。还要注意在 MariaDB 的FORMAT()
.
有关列的架构信息:
SELECT * FROM information_schema.COLUMNS
WHERE table_schema = "database_name"
AND table_name = "table_name"
AND column_name = "column_name"
FLOAT 和 DECIMAL 的示例:
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:
推荐阅读
- android - build.gradle.kts 中的意外标记(使用“;”分隔同一行上的表达式)
- bash - 如何通过 bash 上的管道裁剪文件名
- mysql - MYSQL 从某个日期没有实例的表中选择记录
- android - 使用不包含 MediaQuery 的上下文调用 MediaQuery.of()。错误
- angular - kolkov/ngx-gallery 不显示图像
- flutter - 使用字符串访问主题中的 get 方法
- excel - 编写一个公式以添加 15 分钟直到到达某个时间,然后在到达该时间后打印空白?
- google-apps-script - 如何将段落标题传递给html并返回
- cloudflare - 什么是 cloudflare KV preview_ids 以及如何获得?
- android - Kotlin - 从 MainActivity 调用片段方法