Java,双返回函数,失败时返回什么?
我正在从PHP转向Java,我有点挣扎 我使用这种方法从MySQL数据库获取一些数据,如果没有从数据库获取数据,我会处理失败Java,双返回函数,失败时返回什么?,java,php,Java,Php,我正在从PHP转向Java,我有点挣扎 我使用这种方法从MySQL数据库获取一些数据,如果没有从数据库获取数据,我会处理失败 public double getRate() { double ret; try { // do a select query PreparedStatement stmt = conn.prepareStatement("SELECT `rate` FROM `rates` LIMIT 1"); Resu
public double getRate() {
double ret;
try {
// do a select query
PreparedStatement stmt = conn.prepareStatement("SELECT `rate` FROM `rates` LIMIT 1");
ResultSet rs = stmt.executeQuery();
// get result
rs.absolute(1);
ret = rs.getDouble(1);
// close the resources
rs.close();
stmt.close();
}
// this catches only the SQL errors (if I am right)
catch (SQLException ex) {
ex.printStackTrace();
}
// THIS IS WRONG BECAUSE "variable ret might not have been initialized"
return ret;
}
在PHP中,如果出现如下故障,我们可以返回任何内容:
<?php
public function getRate() {
$ret = db::getOne("SELECT `rate` FROM `rates` LIMIT 1");
if ($ret) {
return $ret; // row has been found, so we return it
} else {
return false; // row hasn't been found, so we return false --> THIS is what I need to do in Java
}
}
?>
使用控制值初始化双变量。如果退出该方法时没有更改,则表示出现了问题
控制值可以是您不希望从查询中获得的值,因此对于速率,它可以是负数,比如说-1
,因为速率不能是负数
double ret=-1.00d;
用控制值初始化双变量。如果退出该方法时没有更改,则表示出现了问题
控制值可以是您不希望从查询中获得的值,因此对于速率,它可以是负数,比如说-1
,因为速率不能是负数
double ret=-1.00d;
您可以使您的方法返回双包装类double
的对象。然后,如果出现故障,您可以返回空指针
public Double getRate() {
...
if(ok)
return new Double(ret);
else
return null;
}
您可以使您的方法返回双包装类double
的对象。然后,如果出现故障,您可以返回空指针
public Double getRate() {
...
if(ok)
return new Double(ret);
else
return null;
}
您有几个选择:
- 抛出异常,并通过调用该方法的代码捕获该异常。这很有效,是一个很好的处理方法。但是需要很多额外的try-catch语句
- 错误时返回-1。如果只处理自然数,这也是一种非常常见的方法
- 始终返回一个结果对象,该对象包含输出和成功/错误状态
- 改用Double类,失败时返回null
您有几种选择:
- 抛出异常,并通过调用该方法的代码捕获该异常。这很有效,是一个很好的处理方法。但是需要很多额外的try-catch语句
- 错误时返回-1。如果只处理自然数,这也是一种非常常见的方法
- 始终返回一个结果对象,该对象包含输出和成功/错误状态
- 改用Double类,失败时返回null
我正在添加一个示例代码,以便您了解如何处理此类场景。
如果默认值不变,则表示没有与查询匹配的内容
public double methodName(int arg)
{
double risk=0.0;
String query = null;
PreparedStatement stm = null;
ResultSet r = null;
Connection con=null;
try{
con=ConnectionDB.getConnection();
if(con!=null)
{
query="select risk from table where year="+arg;
stm = con.prepareStatement(query);
r = stm.executeQuery();
if(r.next())
{
risk=r.getDouble(1);
}
}
}catch(Exception e)
{
e.printStackTrace();
}
finally{
try {
if (r != null) {
r.close();
}
if (stm != null) {
stm.close();
}
if(con!=null)
{
con.close();
}
} catch (Exception e) {
System.out.println("" + e);
}
}
return risk;
}
我正在添加一个示例代码,以便您了解如何处理此类场景。
如果默认值不变,则表示没有与查询匹配的内容
public double methodName(int arg)
{
double risk=0.0;
String query = null;
PreparedStatement stm = null;
ResultSet r = null;
Connection con=null;
try{
con=ConnectionDB.getConnection();
if(con!=null)
{
query="select risk from table where year="+arg;
stm = con.prepareStatement(query);
r = stm.executeQuery();
if(r.next())
{
risk=r.getDouble(1);
}
}
}catch(Exception e)
{
e.printStackTrace();
}
finally{
try {
if (r != null) {
r.close();
}
if (stm != null) {
stm.close();
}
if(con!=null)
{
con.close();
}
} catch (Exception e) {
System.out.println("" + e);
}
}
return risk;
}
在Java中,不能从一个位置返回double,从另一个位置返回boolean。您可以做的是,初始化Double(Double原语的包装器)值,如下所示:
Double ret = null;
若并没有行或任何SQLException,那个么您将把这个值返回给调用者。在被调用的方法中,您可以执行以下操作:
Double rate = getRate();
if (rate == null) {
//no row found
} else {
//i have the row. continue with business logic
}
在Java中,不能从一个位置返回double,从另一个位置返回boolean。您可以做的是,初始化Double(Double原语的包装器)值,如下所示:
Double ret = null;
若并没有行或任何SQLException,那个么您将把这个值返回给调用者。在被调用的方法中,您可以执行以下操作:
Double rate = getRate();
if (rate == null) {
//no row found
} else {
//i have the row. continue with business logic
}
您可以返回一个,这使调用者很明显,他们需要处理找不到结果的情况:
try {
// get ret
return OptionalDouble.of(ret);
} catch (SQLException ex) {
return OptionalDouble.empty();
}
您可以返回一个,这使调用者很明显,他们需要处理找不到结果的情况:
try {
// get ret
return OptionalDouble.of(ret);
} catch (SQLException ex) {
return OptionalDouble.empty();
}
在Java示例中,当您谈论“失败”时,您谈论的是一个意外的错误(例如SQL异常,DB访问中的非预期错误)
然而,在PHP示例中,当您谈论“失败”时,您谈论的是一个正常的场景(数据库中没有数据)
所以,这两个例子是完全不同的
在我看来,如果我得到一个意外的情况,我不会返回任何值,我会抛出一个异常。我通常返回null,-1以及在正常和预期的情况下没有数据返回的此类值。在您的Java示例中,当您谈论“失败”时,您谈论的是一个意外的错误(例如SQL异常,DB访问中的非预期错误)
然而,在PHP示例中,当您谈论“失败”时,您谈论的是一个正常的场景(数据库中没有数据)
所以,这两个例子是完全不同的
在我看来,如果我得到一个意外的情况,我不会返回任何值,我会抛出一个异常。我通常返回null,-1,在正常和预期的场景中,如果没有数据可返回,则返回此类值