gpt4 book ai didi

java - 如何从列元数据中确定列大小是以字节为单位还是以字符为单位?

转载 作者:搜寻专家 更新时间:2023-11-01 02:55:59 26 4
gpt4 key购买 nike

我正在开发一些必须临时在各种数据库(Oracle、DB2、SQLServer)中创建虚拟条目的软件。行中的每一列都填充了随机数据。

该代码使用 java 中的 java.sql.DataBaseMetaData 类来获取 COLUMN_SIZE 属性,以确定要存储在 VARCHAR2 和其他字符串列类型中的随机字符串的大小。

DatabaseMetaData metadata = connection.getMetaData();
while (resultSet.next()) {
ResultSet resultSet = metadata.getColumns(...);
int size = resultSet.getInt("COLUMN_SIZE");
}

问题是,至少在 Oracle 中,我似乎无法弄清楚列长度是以字节还是以字符为单位返回的。此外,根据编码,字符的字节数也不同。结合所有这些,我得到了一些 SQL 错误,因为试图插入的字符串太大了。我是否遗漏了一些明显的东西?

最佳答案

我看不出有什么方法可以通过 JDBC 元数据来确定这一点。还有一个名为 CHAR_OCTET_LENGTH 的列,但在我的实验中,它无助于区分字节和字符语义。

在 Oracle 数据字典中找到它的方法是查看 ALL_TAB_COLUMNS.CHAR_USED:

    CHAR_USED   VARCHAR2(1)     
B | C.
B indicates that the column uses BYTE length semantics.
C indicates that the column uses CHAR length semantics.
NULL indicates the datatype is not any of the following:

* CHAR
* VARCHAR2
* NCHAR
* NVARCHAR2

因此您可以检查您是否已连接到 Oracle,如果是,则对该 View 执行单独的查询以检查大小语义。

关于java - 如何从列元数据中确定列大小是以字节为单位还是以字符为单位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1556371/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com