我用Java编写了一个返回2个值的方法。第一个为int类型的结果计数,第二个为方法成功/错误布尔类型的结果计数。 如何返回两个值?因此,如果该方法成功,则只能继续。
示例代码:
public static void main(String args[])
{
int count = 0;
boolean status = false;
//count = retrieveData(); Current code working but captures only 1 values at a time i.e. Count not the status
/* Expected Code
if (status == true) // where status and count is returned from retrieveData method
{
count = retrieveData();
System.out.println("Status is true so can proceed");
}
else
System.out.println("Status is not true so don't proceed");
*/
}
public static int retrieveData() throws Exception
{
boolean success = false;
String query = "SELECT Count(1) FROM Account";
int totalCount=0;
ResultSet rsRetrieve = null;
Statement stmt = null;
stmt = conn.createStatement();
rsRetrieve = stmt.executeQuery(query);
while (rsRetrieve.next())
{
totalCount= rsRetrieve.getInt(1);
System.out.println("totalCount : "+totalCount);
}
success = true;
return totalCount; // current working code but returns only 1 value i.e. Count not status
/* Expected
return success + totalCount
*/
}
答案 0 :(得分:2)
您可以如下创建自定义Java对象
public class Result {
private boolean success;
private int totalResults;
public Result(boolean success, int totalResults){
this.success = success;
this.totalResults = totalResults;
}
public boolean getSuccess(){
return this.success;
}
public boolean getTotalResults(){
return this.totalResults;
}
}
答案 1 :(得分:2)
从一种方法中重新调整多个值的方法有很多,我使用的一些最佳方法是:
1-为要返回的数据类型创建类,例如,您要返回两个String生成类,如下所示:
public class myType {
String a;
String b;
public String getA() {
return a;
}
public void setA(String _a) {
a = _a;
}
//And All other geter setters
}
并使方法的返回类型返回上述类。
2-具有键值对的返回映射
3-创建接口并从要返回值的位置调用Abstract方法(必须在要接收值的类中实现接口)
希望这会给您一个粗略的思路,以搬家
答案 2 :(得分:0)
我建议您坚持使用当前的通用方法,并且不尝试从您的方法中返回两条信息。您的方法签名会引发异常,一种可能的处理方法是在出现问题时让您的方法引发异常。否则,这意味着count查询确实已运行,并且将返回一些count。但是,您可能应该在JDBC代码周围有一个try catch块:
public static int retrieveData(Connection conn) throws Exception {
Statement stmt = null;
int totalCount = 0;
try {
String query = "SELECT COUNT(*) FROM Account";
ResultSet rsRetrieve;
stmt = conn.createStatement();
rsRetrieve = stmt.executeQuery(query);
if (rsRetrieve.next()) {
totalCount = rsRetrieve.getInt(1);
System.out.println("totalCount : " + totalCount);
}
}
catch (SQLException e) {
System.out.println(e.getMessage());
threw new Exception("something went wrong");
}
finally {
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
}
return totalCount;
}
因此,此处使用的模式是:如果出现问题,则没有计数,并且调用方将获得异常。否则,如果没有异常发生,那么将返回一些计数。
答案 3 :(得分:0)
您不能,但是可以创建一个用于容纳多个对象的Bean类。
如果这是用于程序错误处理,则可能需要查看Optional(标准)或Either(vavr)来处理多个结果
答案 4 :(得分:0)
您可以使用Java Pair
import javafx.util.Pair;
public Pair retrieveData(int a, int b) {
return new Pair(a, b);
}
Pair p = retrieveData(1,2);
int a = p.getKey(); // 1
int b = p.getValue(); // 2
答案 5 :(得分:0)
我想使用<em>
模拟出指针。像C ++ any[1]
和C#*p
。
out
其他样品,能量的:
boolean[] p_status = new boolean[1];
int count = retrieveData(p_status);
boolean status = p_status[0];