JDBC连接Sybase ASE 16如何配置默认表所有者无需加库名前缀
Sybase ASE 16 JDBC 统一配置默认所有者解决方案
方案1:修改JDBC连接URL参数
- 直接在JDBC连接字符串中添加
INIT_SQL参数,连接建立后自动执行设置默认库/所有者的语句:
示例JDBC URL格式:jdbc:sybase:Tds:<主机地址>:<端口>/<默认库名>?INIT_SQL=set user <默认所有者用户名>
未指定前缀的表会默认去当前库的指定所有者名下查找,不需要单独修改业务SQL。
注意:执行
SETUSER需要连接账号拥有对应权限,否则会执行失败。
方案2:连接池初始化SQL配置
- 如果你使用了Druid、HikariCP等连接池,可以在连接池配置中添加初始化执行SQL,每次从连接池获取连接时自动执行设置语句:
以HikariCP为例,配置项添加:connection-init-sql: set user <默认所有者名>; use <默认数据库名>
Druid的对应配置项为connectionInitSqls,配置值和上述语句一致即可。
方案3:修改数据库登录账号的默认配置
- 直接在Sybase ASE服务端修改JDBC所用登录账号的默认属性,不需要调整任何Java代码配置:
登录数据库管理员账号,执行以下命令:
修改完成后重启应用生效,后续所有该账号发起的查询,不带前缀的表会自动匹配默认库的默认所有者。sp_modifylogin <你的JDBC登录账号>, defdb, <默认数据库名> go sp_modifylogin <你的JDBC登录账号>, defschema, <默认所有者名> go
验证方法
配置完成后执行一条不带前缀的查询语句,比如SELECT count(*) FROM <你的业务表名>,如果能正常返回结果不报错,说明配置生效。
内容的提问来源于stack exchange,提问作者Abel Morelos
相关产品推荐
相关产品推荐

