暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase8s jdbc开启元数据大小写敏感功能

wj2021 2022-02-21
2215

通过jdbc操作数据库建表及查询数据时是不区分大小写的,建表后数据库系统表保存的表的元数据统一都是小写的。在有些场合可能需要强制开启大小写敏感功能,本文将介绍如何使用该功能。

jdbc支持通过url配置参数delimient来开启大小写敏感功能,支持值含义如下:

delimient=y:开启敏感功能,sql语句需要使用双引号括起来,开启后数据后将按照实际表,列的大小写存储元数据,通过jdbc获取指定列的值时也需要使用列的实际元数据的大小写形式。

delimident=n:默认值,忽略大小写,sql语句中表名列名不支持使用双引号包围,使用大写或者小写都能查询到指定列的数据。

下面通过测试用例讲解

1、执行测试用例如下:

public class TestJdbcDelidiment {
    public static void main(String[] args) throws Exception {

       String url = "jdbc:gbasedbt-sqli://localhost:19088/zhtest:GBASEDBTSERVER=gbase01;DB_LOCALE=zh_CN.utf8;CLIENT_LOCALE=zh_CN.utf8;delimident=y";
       String  username = "gbasedbt";
       String password = "GBase123";
       Class.forName("com.gbasedbt.jdbc.Driver");
       Connection conn = DriverManager.getConnection(url,username,password);
        create(conn);
       select(conn);
       conn.close();

    }

    private static void create(Connection conn) throws SQLException {
        String sql ="create table \"TestDelidiment\" (\"myID\" varchar(100), \"myName\" varchar(100), \"AGE\" int)";
        PreparedStatement pst = conn.prepareStatement(sql);
        pst.execute();
        pst.close();
    }

    private static void select(Connection conn) throws SQLException {
        Statement st = conn.createStatement();
        st.execute("insert into \"TestDelidiment\" values ('1','name','30')");
        ResultSet rs = st.executeQuery("select * from \"TestDelidiment\"");
        while(rs.next()){
            System.out.println(rs.getString("myID")+","+rs.getString("myName")+","+rs.getString("AGE"));
        }
        rs.close();
        st.close();
    }
}

 

2、执行结果如下:


3、查看系统表元数据验证元数据存储是否区分大小写


4、总结

开启delimient=y后创建表数据库会严格按照大小写内容存储元数据,jdbc在执行插入查询等sql时需要确保使用的表或者列元数据要与系统表一致。

 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论