0

我正在尝试获取已创建并填充的表中的所有行。这是我目前正在尝试执行的功能,显然它不起作用。什么都不放出来。

    public static void getTable(String[] table) throws ClassNotFoundException, SQLException{
    DatabaseMetaData metadata = null;
    Class.forName(driver);
    conn = DriverManager.getConnection(connectionURL);  

    metadata = conn.getMetaData();
    ResultSet res = metadata.getTables(null, null, null, table);

    while(res.next()){
        System.out.println(res.toString());
    }
    res.close();
    conn.close();
}

任何想法我做错了什么?


哇,在玩了几个小时的组合之后。我有一些东西。这会让我很生气,但对于那些可能有这种问题的人来说,这就是我想出的从整个表格中获取数据的方法。

编辑:现在返回一个 HashMap,其中行号和值由“,”分隔。

    /**
 * Gets all rows of a table. Returns a HashMap.
 * 
 * Returns a HashMap with each table row value separated by ','. 
 * Each row in a new count in the hashmap. Example:
 * 
 * Returns:
 * 
 * <1, "FirstName,LastName,Age">
 * 
 * 
 * @param table
 * @return HashMap<Int, String>
 * @throws ClassNotFoundException
 * @throws SQLException
 */
@SuppressWarnings("null")
public static HashMap<Integer, String> getTable(String table) throws ClassNotFoundException, SQLException{
    DatabaseMetaData metadata = null;
    Class.forName(driver);
    conn = DriverManager.getConnection(connectionURL);  

    String sql = "select * from " + table;  // use actual name of the table
    PreparedStatement statement = conn.prepareStatement(sql);
    ResultSet res = statement.executeQuery();
    ResultSetMetaData md = res.getMetaData();
    HashMap<Integer,String> hash = new HashMap();
    int count = md.getColumnCount();
    String done;
    int y = 1;
    while(res.next()){
        for(int x = 1; x < md.getColumnCount(); x = x+md.getColumnCount()){
            done = res.getObject(x).toString() + "," + res.getObject(x+1).toString();
        }
        hash.put(y, done);
        y++;
    }
    res.close();
    conn.close();
    if(!hash.isEmpty())
        return hash;
    else
        return null;
}
4

1 回答 1

2

您可以使用 sql 语句并执行它,例如:

String sql = "select * from <nameOfTable>";  // use actual name of the table
PreparedStatement statement = connection.prepareStatement(sql);
ResultSet rs = statement.execute();

这就是你要问的。

现在,尚不清楚您是否知道下一步要做什么。既然您说您试图避免知道列的名称,那么实际上您将不得不查询元数据以获取这些名称。您可以按列位置从结果集中获取数据,但您无法知道列的数据类型是什么(字符串、整数、blob)。

您可以遍历从元数据中获得的列以找出它们的名称,以及(也许更重要的是)它们的数据类型,这样您就可以对要获取的每一列的结果集调用 getInt 或 getString。

因此,尽管这可能是实际问题的答案,但对它做任何有用的事情都需要更多的逻辑。我们可以帮助你,但现在我只是猜测你想这样做......

于 2012-06-17T03:05:32.640 回答