回答

收藏

JDBC返回空结果集

技术问答 技术问答 133 人阅读 | 0 人回复 | 2023-09-13

我正在使用JDBC实现非常简单的数据库连接。& p* Z! |9 X2 P2 M3 j( R5 l
我创建了连接/句子并进行查询。我在调试器中检查句子的查询对象,以确认它正在发送正确的查询。然后,我再次检查数据库中的查询(直接从调试器中复制),以确保其返回数据。然而,返回结果集中在.next()上给出false
( s$ ~, v. U3 }* E' |0 _这里有我遗漏的常见陷阱吗?
, r3 q; @- n' n9 N- zmyDB));               return returnList;   catch (SQLException e)              e.printStackTrace();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;return null;   myDB));        }         return returnList;    } catch (SQLException e) {        e.printStackTrace();        return null;    }}还有myDB类(一个简单的包装程序使我能够将连接/语句代码放入任何项目)9 G  l3 R, {8 X: H. w
public void sendQuery(String query){    this.query = query;    try              if(statement == null)              statement = connection.createStatement();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;results = statement.executeQuery(query);   catch (SQLException e)              System.out.println(query);        currentError = e;        results = null;        printError(e,"querying");   public ResultSet getResults(){     return results;}编辑:根据建议,我主要修改了我的代码,但仍然有同样的问题。以下是简化具有相同问题的代码。9 l. D. j7 |9 w  V' ]# E% K
private boolean attemptLogin(String uName,String pWord)    ResultSet results;    try{          try            Class.forName("oracle.jdbc.driver.OracleDriver");      catch (ClassNotFoundException e)            e.printStackTrace();             connection =DriverManager.getConnection(connectionString,user,password);        PreparedStatement statement = connection.prepareStatement("select username from users where username='testuser'");        results = statement.executeQuery();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;if(results != null && results.next()){              System.out.println("found a result");            statement.close();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    return true;             System.out.println("did not find a result");        statement.close();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;return false;    }catch(SQLException e){          e.printStackTrace();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;return false;   我了消除错误的来源,我还对查询进行了硬编码。与以前相同的问题(所有查询都会发生)。调试器显示所有实例对象,不打印堆栈跟踪。此外,我可以在不同的项目中使用相同的代码(以及上面列出的更复杂的代码)。' a: R" U  x7 |2 L# d; m
                                                                1 ^3 ~% m; I/ e, w' o/ R
    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则