类型不匹配:无法从元素类型Object转换为String JDBC MetaData

时间:2017-02-21 14:16:25

标签: java mysql sql database jdbc

我的代码

public static ArrayList getTablesMetadata() throws SQLException{
    String table[] = {"TABLE"};
    ResultSet rs = null;
    ArrayList tables = null;

    rs = metadata.getTables(null, null, null, table);
    tables = new ArrayList();
    while(rs.next()){
        tables.add(rs.getString("TABLE_NAME"));
    }
    return tables;
}

public static void getColumnsMetadata(ArrayList tables)
        throws SQLException{
    ResultSet rs = null;

    for(String actualTable : tables){  <-----------------------------------
        rs = metadata.getColumns(null, null, actualTable, null);
        System.out.println(actualTable.toUpperCase());
        while(rs.next()){
            System.out.println(rs.getString("COLUMN_NAME")+ " "
                    + rs.getString("TYPE_NAME")+ " "
                    + rs.getString("COLUMN_SIZE"));
        }
        System.out.println("\n");
    }
}

箭头指出错误,我得到的是:

Type mismatch: cannot convert from element type Object to String

我已经尝试添加某些部分,但认为我做错了,或者我似乎无法看到的代码中出现问题。

2 个答案:

答案 0 :(得分:1)

ArrayList使用Generics

您的table变量是Object的列表,因为未指定泛型类型。你可以:

  1. 将每个表格对象投射到String
  2. 使用ArrayList<String>代替(推荐)

答案 1 :(得分:0)

如果未指定数组列表类型,则假定它包含Object。
试试

getColumnsMetadata(ArrayList<String> tables) 

我想你还需要改变:

tables = new ArrayList<String>(); 

并将getTablesMetadata()的返回值更改为

 ArrayList<String>