3.9K Star 22.5K Fork 7.8K

GVPdromara / hutool

 / 详情

oracle表是数字的时候 getTableMeta获取不到表信息

已完成
创建于  
2024-03-25 13:11

版本情况

JDK版本: openjdk_8_201
hutool版本: 5.8.26(请确保最新尝试是否还有问题)

问题描述(包括截图)

  1. 复现代码
// oracle 表是2345
// 获取不到表信息
MetaUtil.getTableMeta(dsFactory.getDataSource(), null, "BASE", "\"2345\"");

// 报错
MetaUtil.getTableMeta(dsFactory.getDataSource(), null, "BASE", "2345");

Caused by: java.sql.SQLException: 调用中的无效参数
at oracle.jdbc.OracleDatabaseMetaData.getIndexInfo(OracleDatabaseMetaData.java:3792)
at cn.hutool.db.meta.MetaUtil.getTableMeta(MetaUtil.java:255)

评论 (5)

2016C 创建了任务

按理说数字表名不符合Oracle规范的。

尝试:

  1. 使用单引号
  2. 升级驱动试下。

是不符合规范。但是表名不是我们能控制的。他是在获取索引信息的时候要用双引号,而在获取表字段的时候不用双引号。导致这个问题的。

额……看来要针对Oracle单独处理逻辑了。

我本地装个XE试试。

Looly 任务状态待办的 修改为已完成
Looly 添加了
 
question
标签
Looly 任务状态已完成 修改为待办的
Looly 任务状态待办的 修改为已完成

@2016C 不好意思回复晚了,我本地装Oracle遇到了一些困难,好不容易用docker装上了……

我测试使用Oracle XE 21c,本地驱动:

<dependency>
	<groupId>com.oracle.database.jdbc</groupId>
	<artifactId>ojdbc8</artifactId>
	<version>21.13.0.0</version>
	<scope>test</scope>
</dependency>

配置:

# 测试用Oracle数据库
[orcl]
url = jdbc:oracle:thin:@//localhost:1521/XEPDB1
user = system
pass = 123456
remarks = true
final DataSource ds = DSFactory.get("orcl");
final Table tableMeta = MetaUtil.getTableMeta(ds, null, null, "\"1234\"");

经过测试没有复现问题:

输入图片说明

所以怀疑是JDBC驱动本身的bug。

尝试升级你的JDBC驱动试下。

我看你打印的是索引信息。我这边也能正常获取。那边方便打印一下列信息吗?我是空的。
System.out.println(table.getColumns());
我用你上面的驱动版本测试的,结果如下图
输入图片说明

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
1463 loolly admin 1578914022
Java
1
https://gitee.com/dromara/hutool.git
git@gitee.com:dromara/hutool.git
dromara
hutool
hutool

搜索帮助