• 【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

  • 相关阅读:
    grab jpegs from v4l2 devices
    c helloworld on zynq
    minicom installation and configuration on ubuntu
    DBA的做法
    sqlserver锁表、解锁、查看销表
    linux内核分析(网课期末&地面课期中)
    Linux内核分析实验八------理解进程调度时机跟踪分析进程调度与
    LINUX内核分析第七周——可执行程序的装载
    Linux内核分析实验六
    Linux内核分析实验五
  • 原文地址:https://www.cnblogs.com/heyang78/p/16541560.html
Copyright © 2020-2023  润新知