简体   繁体   中英

Check if a column already exists in the table

I need to verify if a column already exists in a table. My class extends CustomTaskChange so my method receives a Database object as an argument. Can I make the verification I want trough the 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);
                    }
                }
    }

Basically what this piece of code is doing is going through all the tables in my database. If, a table name ends in a suffix, I will add the column to it. This way I can add a column to multiple tables at the same time. But I want to add another verification to add the column to a table, and that is that there can't already be a column with that name in that table. Something like this(pseudocode)

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

you can fetch columns from each of the tables then you can check column exist or not.


 {
  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*/
 }}

With the above code, you can check the metadata and then execute the SQL query to delete the same.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM