工作中经常会出现不同的环境之间数据库的差异,然而这些差异并不容易通过肉眼察觉,我们可以通过程序来帮助我们对比。如下举例MySQL数据库下测试环境和集成环境的差异
主要通过INFORMATION_SCHEMA(DSL)来查询数据库的结构
关键代码
- 获取数据库的所有表
private static List<String> getTables(JdbcTemplate jdbcTemplate){
String getTablesSql = "SELECT table_name as tableName FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = DATABASE()";
List<Map<String, Object>> data = jdbcTemplate.queryForList(getTablesSql);
List<String> tables = new ArrayList<>();
for (Map<String, Object> map : data){
tables.add((String) map.get("tableName"));
}
return tables;
}
- 根据表名获取字段信息
private static List<String> getColumns(JdbcTemplate jdbcTemplate, String tableName){
String getColumnSql = "select column_name columnName from information_schema.columns where table_schema =DATABASE() and table_name = '"+tableName+"'";
List<Map<String, Object>> data = jdbcTemplate.queryForList(getColumnSql);
List<String> columns = new ArrayList<>();
for (Map<String, Object> map : data){
columns.add((String) map.get("columnName"));
}
return columns;
}
- 根据需要传入jdbcTemplate数据源即可完成需要的对比