使用Spring jdbcTemplate时如何检查列名是否存在?

时间:2018-07-04 08:17:15

标签: java jdbctemplate

我正在使用jdbcTemplate将数据写入我的Oracle DB。我想在同一个表中但在两个不同的环境中重用我的代码,而这两个环境之间的区别只是缺少一列。因此,在写入数据之前,我需要检查该列是否存在以使用正确的sql查询,否则我将获得异常。所以我想拥有类似的东西:

if(column3IsMissing){
    String sql = String.format("insert into %s %s", MYTABLE,
                "(column1, column2) values (?, ?)");
}else{
    String sql = String.format("insert into %s %s", MYTABLE,
                "(column1, column2, column3) values (?, ?, ?)");

}
jdbcTemplate.batchUpdate(sql, data, types);

任何人都可以提示我如何在此处实施column3IsMissing检查吗?非常感谢您!

2 个答案:

答案 0 :(得分:1)

  

Oracle提供了三个不同的视图来获取表列信息:ALL_TAB_COLUMNS,USER_TAB_COLUMNS和DBA_TAB_COLUMNS。

您可以使用JDBC如下运行查询,以在运行插入查询之前确认列是否存在。

select column_name from ALL_TAB_COLUMNS where TABLE_NAME = 'MYTABLE';

答案 1 :(得分:0)

为了获得检查列的大小。将所有列都放入数组,然后检查是否 columnSize = 2。

String[] columnList = {column1,column2,column3);

if(columnList.size()==2){ String sql = String.format("insert into %s %s", MYTABLE, "(column1, column2) values (?, ?)"); }else{ String sql = String.format("insert into %s %s", MYTABLE, "(column1, column2, column3) values (?, ?, ?)");

} jdbcTemplate.batchUpdate(sql, data, types);