Type字段是VARCHAR(45)且包含属性“目录”,为何遍历时if(directorie.getType()==“目录”),判断为否?请优化修改代码?
时间: 2024-09-14 15:10:27 浏览: 28
当`Type`字段是`VARCHAR(45)`,意味着它存储的是可变长度的字符串。如果`directorie.getType()`确实返回的是字符串"目录",但在判断时`if(directorie.getType()=="目录")`未通过,可能有以下几种情况:
1. **大小写问题**:数据库查询或字段值处理可能存在大小写敏感性。确保在比较时两个字符串的大小写一致。
2. **空格或特殊字符**:`"目录"` 后面有可能有空格或其他字符,导致不匹配。可以用 `trim()` 函数去除前后空白再做比较。
3. **NULL值**:`getType()` 可能返回 NULL,检查下是否进行了适当的 null 检测。
4. **数据类型转换**:尽管通常不需要手动类型转换,但确保在比较前没有隐式类型转换导致的异常。
为了优化,你可以尝试以下修改:
```java
String type = directorie.getType().trim();
boolean isDirectory = type != null && type.equalsIgnoreCase("目录");
if (isDirectory) {
// 执行相应操作
}
```
这里添加了对 `null` 和大小写的处理,并将判断合并成一个布尔表达式。这样可以更清晰地检查是否为"目录"。
相关问题
select c.relname as "表名", cast(obj_description(c.oid) as varchar) as "表注释", a.attnum as "序号", a.attname as "字段名称", d.description as "字段注释", concat_ws('', t.typname, SUBSTRING(format_type(a.atttypid, a.atttypmod) from '\(.*\)')) as "字段类型" from pg_attribute a left join pg_description d on d.objoid = a.attrelid and d.objsubid = a.attnum left join pg_class c on a.attrelid = c.oid left join pg_type t on a.atttypid = t.oid where a.attnum >= 0 and c.relname in('ods_vem_busi_base') order by c.relname desc, a.attnum asc;这段pgsql查出的表结构每个字段都重复出现一次,这是为什么
这是因为这段 SQL 语句使用了多个表之间的连接查询,其中包含了 pg_attribute、pg_description、pg_class、pg_type 这些表。而每个字段都需要从不同的表中获取不同的信息,因此需要在每个表中查询一遍。这就导致了每个字段都会在结果集中出现多次。但是,每个字段所对应的信息都不相同,因此这种重复是必要的。
select c.relname as "表名", cast(obj_description(c.oid) as varchar) as "表注释", a.attnum as "序号", a.attname as "字段名称", d.description as "字段注释", concat_ws('', t.typname, SUBSTRING(format_type(a.atttypid, a.atttypmod) from '(.*)')) as "字段类型" from pg_attribute a left join pg_description d on d.objoid = a.attrelid and d.objsubid = a.attnum left join pg_class c on a.attrelid = c.oid left join pg_type t on a.atttypid = t.oid where a.attnum >= 0 and c.relname in('ods_vem_busi_base') order by c.relname desc, a.attnum asc;这段pgsql查出的表结构与真实表结构不一致,对比真实表结构字段翻倍这是为什么
这种情况可能是由于表中存在了多个相同的字段导致的。在 PostgreSQL 中,允许在一个表中定义多个同名的字段,只要它们的数据类型、约束条件等属性都相同。而这段 SQL 查询语句是基于系统表 pg_attribute 来获取表结构信息的,它会将每个同名的字段都列出来,因此导致了结果集中每个字段都重复出现了多次。如果想要查看真实的表结构,可以使用 \d+ 命令或者在 pgAdmin 等图形化界面中查看。
阅读全文