JDBC连接Hana时指定数据库报错的技术问题咨询
HANA与SQuirreL连接问题:指定数据库报错的原因与解决办法
问题原因
咱们先把底层逻辑理清楚,你遇到的坑其实是SQuirreL的配置逻辑和HANA JDBC驱动的要求不匹配导致的:
- HANA里你说的「DB1」是租户数据库,而HANA的JDBC驱动要求租户库必须通过URL参数来指定,不支持通过第三方工具(比如SQuirreL)的通用「Database」字段传递
- 当你在SQuirreL里填了「Database」为DB1时,SQuirreL会自作主张把这个值以不符合HANA要求的方式拼接到JDBC请求里,导致驱动误以为你要连接一个名为「DB1」的独立数据库实例(而不是租户库),所以抛出「数据库不存在」的错误
- 当你不指定数据库时,SQuirreL用的是默认JDBC URL,此时会先连接到HANA的系统数据库,之后你手动对DB1执行查询,其实是在系统库的上下文里切换到租户库操作,所以能正常运行
解决办法
核心思路就是绕开SQuirreL的「Database」配置项,直接用HANA驱动认可的URL格式指定租户库:
- 打开SQuirreL的连接配置界面,找到「JDBC URL」输入框
- 将URL修改为带租户库参数的格式,二选一即可(取决于你的HANA驱动版本):
- 格式1(推荐,适配大多数新版本驱动):
jdbc:sap://10.194.19.20:39013/?databaseName=DB1 - 格式2(部分旧版本驱动支持):
jdbc:sap://10.194.19.20:39013/DB1
- 格式1(推荐,适配大多数新版本驱动):
- 一定要清空「Database」输入框里的内容,避免SQuirreL添加冲突的参数干扰连接
- 保存配置后重新连接,这次就能直接连上DB1租户库,无需再手动切换上下文
额外给你个验证小技巧:可以先用HANA自带的客户端工具测试连接是否有效,命令如下:
java -jar hdbclient.jar -n 10.194.19.20:39013 -d DB1 -u 你的用户名 -p 你的密码
如果这个命令能成功连接,说明URL格式没问题,直接同步到SQuirreL里就稳了。
内容的提问来源于stack exchange,提问作者ps0604
相关产品推荐
相关产品推荐

