从Java derby中获取表中的所有行

时间:2012-06-17 02:12:18

标签: java sql rows derby

我正在尝试获取已创建并填充的表中的所有行。这是我目前正在尝试的功能,显然它不起作用。没有任何东西。

    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;
}

1 个答案:

答案 0 :(得分:2)

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

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

这就是你所要求的。

现在,您不知道接下来会做什么。既然您说您试图避免知道列的名称,那么您实际上必须查询元数据以获取这些名称。您可以按列位置从结果集中获取数据,但您无法知道列的数据类型是什么(string,int,blob)。

您可以遍历从元数据中获取的列以查找其名称,以及(可能更重要的)其数据类型,以便您可以在要获取的每个列的结果集上调用getInt或getString。

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