gpt4 book ai didi

Java resultset.next() 不返回结果

转载 作者:行者123 更新时间:2023-12-01 13:01:28 40 4
gpt4 key购买 nike

有一个连接到 apache derby 数据库的 java 类。突然停止工作,我不知道为什么。

基本上,客户端连接到服务器,服务器调用“联系人”类,然后联系人类查询数据库并返回结果。

这是 Contact 类的代码:

import java.sql.*;

//Contact Class. Used to get information from the contact database.
//Takes the database connection and the student ID as arguments
public class Contact {
//Define the original variables
String student = null;
Connection db = null;
PreparedStatement selectStatement = null;
ResultSet resultSet = null;
StringBuilder result = null;

//Constructor method. Used to set passed arguments to class variables.
public Contact(Connection conn, String studentNumber)
{
this.student = studentNumber;
this.db = conn;
}

//getResult method used to query the database and return result.
public String getResult()
{
//Wrap it all in a try loop to catch sql errors.
try {
//Set up the statement, prepare the statement and set the variable.
String selectSQL = "SELECT * FROM Contact WHERE STUID = ?";
selectStatement = db.prepareStatement(selectSQL);
selectStatement.setString(1, this.student);
//Execute the query
resultSet = selectStatement.executeQuery();
//If there is no results, set up a string to return letting the user know.
this.result = new StringBuilder();
if(!resultSet.next())
{
result.append("No record for ");
result.append(this.student);
result.append(".");
}
else
{
//If there are results, loop through the result and build a string
//To be able to return to the user with the correct details.
System.out.println("FOUND A RESULT");
while(resultSet.next())
{
System.out.println("TEST");
System.out.println(resultSet.getString("STUID"));
result.append(resultSet.getString("STUID"));
result.append(" ");
result.append(resultSet.getString("STUNAME"));
result.append(" ");
result.append(resultSet.getString("ADDRESS"));
result.append(" ");
result.append(resultSet.getString("POSTCODE"));
result.append(" ");
result.append(resultSet.getString("EMAIL"));
}
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//Return the built string with correct information.
return this.result.toString();
}
}

如果我输入的 STUID 不在数据库中,它会通过返回“No Record For ID”成功地让我知道。但是,如果我输入数据库中的一个,它会打印“FOUND A RESULT”行(只是一个测试行),但从未真正到达“TEST”输出 - 因此永远不会用结果构建任何字符串。

我知道这不是数据库,因为我在线程类中测试了一些代码(在调用此联系人类之前),并且查询相同的数据库有效:

    Statement s = null;
ResultSet rs = null;
try{
s = dbConnection.createStatement();
rs = s.executeQuery("SELECT * FROM Contact");
while(rs.next())
{
System.out.println(rs.getString("STUID"));
}
}catch(SQLException e)
{
e.printStackTrace();
}

该测试代码有效。

所以我真的很困惑为什么它可以成功查询数据库,并发现没有结果(通过使用 if(!resultSet.next() ),但如果发现实际上有一个结果它无法循环给我详细信息。任何帮助将不胜感激!

最佳答案

发生这种情况是因为您正在越过结果集中的第一个结果:

if(!resultSet.next())
{
result.append("No record for ");
result.append(this.student);
result.append(".");
}
else // <-- failurehere
{

你的 else 隐式调用 resultSet.next() ,它将移过第一个元素。如果您查询包含两个元素的内容,您只会返回第二个元素。

关于Java resultset.next() 不返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23484311/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com