【java/jdbc】如何用程序动态查询某型数据库所允许的最大表名长度
【需求】
程序中需要建表,需要动态知道DB系统所允许的表名最大长度。
如果按11g允许的30位给12c,19c设置,那么后两者实际允许的128位就被武断限制了。
【思路】
使用create table tname(df char(1));这样的语句建表,不断加长tname的长度,当建表出现异常时,回退一位便是系统允许的最大表名长度。
【程序】
Test类:
package com.hy.lab.tablelength; import java.sql.Connection; import java.sql.Statement; public class Test { public static void main(String[] args){ System.out.println(probeMaxLen()); } public static int probeMaxLen(){ int retval=30; String tname="t1234"; try(Connection conn=DbUtil.getConn(); Statement stmt=conn.createStatement()){ while(true){ tname+="0"; String createSql=String.format("create table %s(fd char(1))",tname); stmt.execute(createSql); String deleteSql=String.format("drop table %s purge",tname); stmt.execute(deleteSql); } }catch(Exception ex){ retval=tname.length()-1; } return retval; } }
DbUtil类:
package com.hy.lab.tablelength; import java.sql.Connection; import java.sql.DriverManager; public class DbUtil { //-- 以下为连接Oracle数据库的四大参数 private static final String DRIVER = "oracle.jdbc.OracleDriver"; private static final String URL = "jdbc:oracle:thin:@127.0.0.1:1521/orcl"; private static final String USER = "luna"; private static final String PSWD = "1234"; public static Connection getConn() throws Exception{ Class.forName(DRIVER); Connection conn = DriverManager.getConnection(URL, USER, PSWD); return conn; } }
【输出】
30
【扩展思路】
可以用一张表把DB和对应的允许长度存起来,第二次便可以从表中取了。
END
分类:
Java.JDBC
, Java.DB.Oracle
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
2016-08-01 问题 “No mapping found for HTTP request with URI [/rbiz4/uploadFile.html]” 的解决
2014-08-01 爪哇国新游记之二十五----图及其遍历查找
2014-08-01 爪哇国新游记之二十四----二叉树