【问题标题】:Java SQL query execution, problems in reading the ResultSet rowsJava SQL 查询执行,读取 ResultSet 行时出现问题
【发布时间】:2013-12-05 08:58:30
【问题描述】:

我正在编写简单的 Java 代码,并且必须在我的 Postgresql 数据库上执行 SQL 查询。 这个数据库的结果(我手动检查过)是一个由一列和两个整数组成的简单表,如下所示:

我的问题是我找不到任何方法来读取这两行。 我的阅读代码是:

_conn.setReadOnly(false);

_stmt = _conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);

_stmt.setFetchSize(100);

列表 lista = new List();

_rs = _stmt.executeQuery(查询);

而 (_rs.next()) {

lista.add((short)_rs.getInt(1));

}

此代码仅读取第一行,但无法使其读取第二行。 短列表“lista”始终包含 1 个元素。 这就像如果 ResultSet 没有继续读取第二行...

如何读取这两行?

编辑:我尝试过使用 ArrayList,但它不起作用。我已经为 _conn 连接和 _stmt 语句添加了代码部分。 这是查询:

            SELECT COUNT(bffK.biological_function_feature_oid) 
        FROM biological_function_feature AS bff 
        INNER JOIN biological_function_feature_unfolded AS bffu 
        ON bff.biological_function_feature_oid = bffu.term_oid 
        INNER JOIN (    SELECT DISTINCT ON (g.gene_oid, bffu.ancestor_oid) g.gene_oid AS ance_gene, bffu.ancestor_oid AS ance_oid, mf.feature_name AS feature_name, mf.feature_id AS feature_id, ef.name AS evidence, qf.name AS qualifier  
                FROM gene2biological_function_feature AS g2bff  
                INNER JOIN biological_function_feature AS bff  
                ON g2bff.biological_function_feature_oid = bff.biological_function_feature_oid   
                INNER JOIN biological_function_feature_unfolded AS bffu  
                ON bffu.term_oid = bff.biological_function_feature_oid  
                INNER JOIN metadata.feature AS mf ON bff.feature_type = mf.feature_id   
                INNER JOIN gene AS g ON g2bff.gene_oid = g.gene_oid  
                LEFT JOIN flag.evidence_flags AS ef ON g2bff.evidence = ef.id  
                LEFT JOIN flag.qualifier_flags AS qf ON g2bff.qualifier = qf.id     
                LEFT JOIN flag.inferred_flags AS fif ON fif.id = g2bff.inferred    
                WHERE g.gene_oid=(4060969) 
                AND (bff.is_obsolete NOT IN ('t') OR bff.is_obsolete IS NULL)    
                AND (g.is_obsolete NOT IN ('t') OR g.is_obsolete IS NULL)
                AND distance=1   
                 UNION 
                SELECT DISTINCT ON (g.gene_oid, bff.biological_function_feature_oid)   
                g.gene_oid AS ance_gene, bff.biological_function_feature_oid AS ance_oid, 
                mf.feature_name AS feature_name, mf.feature_id AS feature_id,  
                ef.name AS evidence, 
                qf.name AS qualifier   
                FROM gene2biological_function_feature AS g2bff  
                INNER JOIN biological_function_feature AS bff  
                ON g2bff.biological_function_feature_oid = bff.biological_function_feature_oid    
                INNER JOIN metadata.feature AS mf ON bff.feature_type = mf.feature_id    
                INNER JOIN gene AS g ON g2bff.gene_oid = g.gene_oid  
                LEFT JOIN flag.evidence_flags AS ef ON g2bff.evidence = ef.id  
                LEFT JOIN flag.qualifier_flags AS qf ON g2bff.qualifier = qf.id     
                LEFT JOIN flag.inferred_flags AS fif ON fif.id = g2bff.inferred    
                WHERE g.gene_oid=(4060969) 
                AND (bff.is_obsolete NOT IN ('t') OR bff.is_obsolete IS NULL)   
                AND (g.is_obsolete NOT IN ('t') OR g.is_obsolete IS NULL)  
                AND ef.name NOT IN ('IEA', 'ND') 
            ) 
        AS unf ON unf.ance_oid = bffu.ancestor_oid 
        INNER JOIN gene AS gK on gk.Gene_oid=ance_gene 
        INNER JOIN biological_function_feature AS bffK 
        ON bffK.biological_function_feature_oid = bffu.ancestor_oid 
        LEFT JOIN flag.evidence_flags AS efK  
        ON evidence = efK.name 
        LEFT JOIN flag.qualifier_flags AS qfK  
        ON qualifier = qfK.name 
        WHERE bffu.distance=1 AND (bff.biological_function_feature_oid) IN (217538)
        AND evidence NOT IN ('IEA', 'ND')   
        UNION 
        SELECT COUNT(bffK.biological_function_feature_oid) 
        FROM biological_function_feature AS bff 
        INNER JOIN biological_function_feature_unfolded AS bffu 
        ON bff.biological_function_feature_oid = bffu.term_oid 
        INNER JOIN (    SELECT DISTINCT ON (g.gene_oid, bffu.ancestor_oid) g.gene_oid AS ance_gene, bffu.ancestor_oid AS ance_oid, mf.feature_name AS feature_name, mf.feature_id AS feature_id, ef.name AS evidence, qf.name AS qualifier  
                FROM gene2biological_function_feature AS g2bff  
                INNER JOIN biological_function_feature AS bff  
                ON g2bff.biological_function_feature_oid = bff.biological_function_feature_oid   
                INNER JOIN biological_function_feature_unfolded AS bffu  
                ON bffu.term_oid = bff.biological_function_feature_oid  
                INNER JOIN metadata.feature AS mf ON bff.feature_type = mf.feature_id   
                INNER JOIN gene AS g ON g2bff.gene_oid = g.gene_oid  
                LEFT JOIN flag.evidence_flags AS ef ON g2bff.evidence = ef.id  
                LEFT JOIN flag.qualifier_flags AS qf ON g2bff.qualifier = qf.id     
                LEFT JOIN flag.inferred_flags AS fif ON fif.id = g2bff.inferred    
                WHERE g.gene_oid=(4060969) 
                AND (bff.is_obsolete NOT IN ('t') OR bff.is_obsolete IS NULL)    
                AND (g.is_obsolete NOT IN ('t') OR g.is_obsolete IS NULL)
                AND distance=1   
                 UNION 
                SELECT DISTINCT ON (g.gene_oid, bff.biological_function_feature_oid)   
                g.gene_oid AS ance_gene, bff.biological_function_feature_oid AS ance_oid, 
                mf.feature_name AS feature_name, mf.feature_id AS feature_id,  
                ef.name AS evidence, 
                qf.name AS qualifier   
                FROM gene2biological_function_feature AS g2bff  
                INNER JOIN biological_function_feature AS bff  
                ON g2bff.biological_function_feature_oid = bff.biological_function_feature_oid    
                INNER JOIN metadata.feature AS mf ON bff.feature_type = mf.feature_id    
                INNER JOIN gene AS g ON g2bff.gene_oid = g.gene_oid  
                LEFT JOIN flag.evidence_flags AS ef ON g2bff.evidence = ef.id  
                LEFT JOIN flag.qualifier_flags AS qf ON g2bff.qualifier = qf.id     
                LEFT JOIN flag.inferred_flags AS fif ON fif.id = g2bff.inferred    
                WHERE g.gene_oid=(4060969) 
                AND (bff.is_obsolete NOT IN ('t') OR bff.is_obsolete IS NULL)   
                AND (g.is_obsolete NOT IN ('t') OR g.is_obsolete IS NULL)  
                AND ef.name IN ('IEA', 'ND') 
            ) 
        AS unf ON unf.ance_oid = bffu.ancestor_oid 
        INNER JOIN gene AS gK on gk.Gene_oid=ance_gene 
        INNER JOIN biological_function_feature AS bffK 
        ON bffK.biological_function_feature_oid = bffu.ancestor_oid 
        LEFT JOIN flag.evidence_flags AS efK  
        ON evidence = efK.name 
        LEFT JOIN flag.qualifier_flags AS qfK  
        ON qualifier = qfK.name 
        WHERE bffu.distance=1 AND (bff.biological_function_feature_oid) IN (217538)
        AND evidence IN ('IEA', 'ND')

【问题讨论】:

  • query 是什么样的?
  • 大家好。我没有解决我的问题,但我更改了查询以获得 2 行和 2 列作为输出,然后 ResultSet 工作正常。我以这种方式更改了查询 SELECT 部分:SELECT COUNT(bffK.biological_function_feature_oid), 'IEA ND' FROM [...] SELECT COUNT(bffK.biological_function_feature_oid), 'NON-IEA NON-ND' FROM [...]。输出变成:第一行 'IEA ND' | 0;第二行:'NON-IEA NON-ND'| 1. 还是谢谢

标签: java sql sql-server postgresql resultset


【解决方案1】:

List 是一个接口,因此您不能直接实例化,而是使用它的实现之一,如 ArrayList。另请注意,count 是 PG 中的关键字,因此请避免使用关键字作为标识符。工作解决方案:

pst = connection.prepareStatement("SELECT * FROM demo");
List<Short> lista = new ArrayList<Short>();
rs = pst.executeQuery();

while (rs.next()) {
   lista.add((short)rs.getInt(1));
}

【讨论】:

    【解决方案2】:

    List 是一个接口,尝试使用 ArrayList 之类的东西

    List< Short > lista = new ArrayList< Short >();
    
    _rs = _stmt.executeQuery(query);
    
         while (_rs.next()) {
    
    lista.add((short)_rs.getShort(1));
    
    }
    

    【讨论】:

    • 这个查询对我来说太可怕了。它不是对我有用的代码 sn-p。
    【解决方案3】:

    这似乎不是语法问题。当您对数据库运行查询时,您是否也得到了一行?也许您也可以发布您的 SQL 查询。

    【讨论】:

    • 我已经插入了查询和一些关于连接和语句的代码细节。也许他们是问题所在?
    猜你喜欢
    • 2023-03-03
    • 2022-11-29
    • 1970-01-01
    • 2016-11-11
    • 2016-08-24
    • 2019-08-29
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多