4 java sql sql-server oracle db2
我正在开发一些软件,它必须临时在各种数据库(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");
}
Run Code Online (Sandbox Code Playgroud)
问题是,至少在 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
Run Code Online (Sandbox Code Playgroud)
因此,您可以检查是否已连接到 Oracle,如果已连接,则针对此视图执行单独的查询以检查大小语义。
| 归档时间: |
|
| 查看次数: |
4111 次 |
| 最近记录: |