簡體   English   中英

Java SQL查詢執行,讀取ResultSet行時出現問題

[英]Java SQL query execution, problems in reading the ResultSet rows

我正在編寫簡單的Java代碼,我必須在Postgresql數據庫上執行SQL查詢。 這個數據庫的結果(我手動檢查)是一個由一列和兩個整數組成的簡單表,如下所示:

在此輸入圖像描述

我的問題是我找不到任何方法來閱讀這兩行。 我的閱讀代碼是:

_conn.setReadOnly(假);

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

_stmt.setFetchSize(100);

List <Short> lista = new List <Short>();

_rs = _stmt.executeQuery(查詢);

while(_rs.next()){

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

}

此代碼僅讀取第1行,但無法使其讀取第2行。 短名單“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')

List是一個接口,嘗試使用類似ArrayList的東西

List< Short > lista = new ArrayList< Short >();

_rs = _stmt.executeQuery(query);

     while (_rs.next()) {

lista.add((short)_rs.getShort(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));
}

它似乎不是語法問題。 在針對數據庫運行查詢時,您是否也獲得了一行? 也許你也可以發布你的SQL查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM