【问题标题】:Check if a column already exists in the table检查表中是否已存在列
【发布时间】:2021-04-07 14:18:55
【问题描述】:

我需要验证表中是否已存在列。我的类扩展了 CustomTaskChange,所以我的方法接收一个 Database 对象作为参数。我可以通过 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);
                    }
                }
    }

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

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

【问题讨论】:

    标签: java database resultset


    【解决方案1】:

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


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

    【讨论】:

    • 使用该代码可以删除DatabaseMetadata吗?
    • 我想也许我没有很好地解释我的问题,我会更新它
    【解决方案2】:

    通过上面的代码,你可以检查元数据,然后执行SQL查询删除。

    【讨论】:

    • 对不起,我没听懂
    • 这样的,if(col_name.equals("YourColumnName"){ Statement stmt = connection.createStatement(); String sql = "ALTER TABLE &lt;TABLENAME&gt; DROP COLUMN &lt;YourColumnName&gt;"; stmt.executeUpdate(sql);}
    • 但是如何检查表中是否已经存在该列?我的问题是访问每个表中的列列表。例如,我想做的是这样的while (rs.next){ getColumnsinTable; checkIfColumnNameExisits;
    • {Connection con = datasource.getConnection(); Statement st = con.createStatement(); ResultSet rs = st.executeQuery("SELECT * FROM TestTable"); ResultSetMetaData md = rs.getMetaData(); int col = md.getColumnCount(); for (int i = 1; i &lt;= col; i++){ String col_name = md.getColumnName(i); if(col_name.equals("columnname")){ String sql = "ALTER TABLE TestTable DROP COLUMN columnname"; int queryResult = st.executeUpdate(sql); if(queryResult==1) System.out.println("column deleted"); else System.out.println("column not found"); }} } 这是一个工作代码。
    猜你喜欢
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 2011-04-23
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多