检查 table 中是否已存在列

Check if a column already exists in the table

我需要验证某个列是否已存在于 table 中。我的 class 扩展了 CustomTaskChange,因此我的方法接收一个数据库对象作为参数。我可以通过 ResultSetObject 进行我想要的验证吗?

@Override
    public void execute(Database database) throws CustomChangeException {
    
            JdbcConnection connection = (JdbcConnection) database.getConnection();
            DatabaseMetaData metadata;
            metadata = connection.getMetaData();
            String[] types = {"TABLE"};
            ResultSet rs = metadata.getTables(null, null, "%", types);
            Statement s = connection.createStatement();

                while (rs.next()) {
                    String tableName = rs.getString(3);
                    if (tableName.endsWith(this.suffix)) {
                        String sql = sqlStatement.replaceAll("name", tableName);
                        s.execute(sql);
                    }
                }
    }

基本上这段代码所做的是遍历我数据库中的所有 table。如果 table 名称以后缀结尾,我将向其添加该列。这样我就可以同时向多个 table 添加一列。 但是我想添加另一个验证以将列添加到 table,那就是 table 中不能已经有同名的列。像这样(伪代码)

if(tableName.endsWith(this.suffis) && columnName doesn't exist in that table){
   String sql = sqlStatement.replaceAll("name", tableName);
   s.execute(sql);
}
   

您可以从每个表中获取列,然后您可以检查列是否存在。


 {
  Statement st = con.createStatement();
  ResultSet rs = st.executeQuery("SELECT * FROM TABLENAME LIMIT 1");
  ResultSetMetaData md = rs.getMetaData();
  int col = md.getColumnCount();
  for (int i = 1; i <= col; i++){
  String col_name = md.getColumnName(i);
   if(col_name.equals("YourColumnName"){
     /*Then the column already exist*/
 }}

使用上面的代码,您可以检查元数据,然后执行 SQL 查询以删除元数据。