Java SQL查询执行,读取结果集行时出现问题
我正在编写简单的Java代码,我必须在我的Postgresql数据库上执行SQL查询。 这个数据库的结果(我手动检查过)是一个由一列和两个整数组成的简单表,如下所示: 我的问题是我找不到任何方法来阅读这两行。 我的阅读代码是: _conn.setReadOnly(假) _stmt=\u conn.createStatement(ResultSet.TYPE\u SCROLL\u SENSITIVE,ResultSet.CONCUR\u READ\u) _stmt.setFetchSize(100) ListJava SQL查询执行,读取结果集行时出现问题,java,sql,sql-server,postgresql,resultset,Java,Sql,Sql Server,Postgresql,Resultset,我正在编写简单的Java代码,我必须在我的Postgresql数据库上执行SQL查询。 这个数据库的结果(我手动检查过)是一个由一列和两个整数组成的简单表,如下所示: 我的问题是我找不到任何方法来阅读这两行。 我的阅读代码是: _conn.setReadOnly(假) _stmt=\u conn.createStatement(ResultSet.TYPE\u SCROLL\u SENSITIVE,ResultSet.CONCUR\u READ\u) _stmt.setFetchSize(10
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')
这似乎与语法无关。在对数据库运行查询时,是否也会得到一行?也许您也可以发布SQL查询。列表是一个界面,请尝试使用类似ArrayList的东西
List< Short > lista = new ArrayList< Short >();
_rs = _stmt.executeQuery(query);
while (_rs.next()) {
lista.add((short)_rs.getShort(1));
}
Listlista=newarraylist();
_rs=_stmt.executeQuery(查询);
而(_rs.next()){
列表a.add((short)rs.getShort(1));
}
列表是一个接口,因此您不能直接实例化,而不是使用它的一个实现,如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));
}
pst=connection.prepareStatement(“从演示中选择*);
List lista=new ArrayList();
rs=pst.executeQuery();
while(rs.next()){
添加((短)rs.getInt(1));
}
查询是什么样子的?大家好。我没有解决我的问题,但我更改了查询以获得两行两列作为输出,然后结果集工作正常。我改变了查询选择部分的方式:SELECT COUNT(bffK.biological\u function\u feature\u oid),SELECT COUNT(bffK.biological\u function\u feature\u oid),SELECT COUNT(bfk.biological\u feature\u oid),[…]中的“非IEA非ND”。输出为:第一行“IEA ND”| 0;第二行:“非IEA非ND”1。无论如何,谢谢。我已经插入了关于连接和语句的查询和一些代码细节。也许他们是问题所在?这个问题对我来说太可怕了。这不是代码片段,这对我来说很有用。