通过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时需要确保使用的表或者列元数据要与系统表一致。