java - 在 Java derby 中获取表中的所有行

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

最佳答案

您可以使用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。

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

关于java - 在 Java derby 中获取表中的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11068445/

相关文章:

java - 在 ArrayList java 中创建数组

java - 如何向 Cucumber Runner 类添加多个功能文件

java - PSQL异常 : ERROR: operator does not exist: character varying = uuid

sql - DBCC DBREINDEX ('?' 、 ' ' 、 80) 是做什么的?

php - 在 JOIN 查询中获取共享参数

java - 用行填充矩阵

java - Spring Boot 嵌入式 Tomcat 中的自定义 SAML 身份验证阀 - 不适用于执行器端点

mysql - 获取范围内的下一个可用值

php - 一次提交多行mysql

重复 data.frame 的行