gpt4 book ai didi

java - 在Java中,如果发生异常,如何设置返回类型?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:11:30 24 4
gpt4 key购买 nike

大家好,我是 Java 的新手,想知道我是否定义了一个返回数据库对象的方法

喜欢

import java.sql.*;

public class DbConn {

public Connection getConn() {
Connection conn;
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
if(System.getenv("MY_ENVIRONMENT") == "development") {
String hostname = "localhost";
String username = "root";
String password = "root";
}
conn = DriverManager.getConnection("jdbc:mysql:///mydb", username, password);
return conn;
} catch(Exception e) {
throw new Exception(e.getMessage());
}

}

}

如果在我尝试创建连接时连接失败,我应该返回什么? eclipse 告诉我必须返回一个 Connection 对象,但如果它失败,我不知道该怎么做。

谢谢!

让异常冒泡的更新代码:

public class DbConn {

public Connection getConn() throws SQLException {
Connection conn;
String hostname = "localhost";
String username = "root";
String password = "root";

Class.forName("com.mysql.jdbc.Driver").newInstance();
if(System.getenv("MY_ENVIRONMENT") != "development") {
hostname = "localhost";
username = "produser";
password = "prodpass";
}
conn = DriverManager.getConnection("jdbc:mysql:///mydb", username, password);
return conn;

}

}

最佳答案

如果抛出异常,则该方法没有返回正常值。通常编译器能够检测到这一点,因此它甚至不会用“需要返回”式的警告/错误来缠扰您。有时,当它不能这样做时,您需要给出一个“不在场证明”的返回语句,实际上它永远不会被执行。

像这样重新定义你的方法

public Connection getConn() {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
if(System.getenv("MY_ENVIRONMENT") == "development") {
String hostname = "localhost";
String username = "root";
String password = "root";
}
conn = DriverManager.getConnection("jdbc:mysql:///mydb", username, password);
} catch(Exception e) {
// handle the exception in a meaningful way - do not just rethrow it!
}
return conn;
}

将满足 Eclipse :-)

更新:正如其他人指出的那样,按照您的方式在 catch block 中重新抛出异常不是一个好主意。它是一个不错的解决方案的唯一情况是您需要在不同的异常类型之间进行转换。例如。一个名为 throws 的方法抛出一个你不能或不想向上传播的异常类型(例如,因为它属于专有库或框架,你想将其余代码与其隔离)。

即便如此,重新抛出异常的正确方法是将原始异常传递给新异常的构造函数(标准 Java 异常和大多数特定于框架的异常都允许这样做)。这样,堆栈跟踪和原始异常中的任何其他信息都会保留下来。在重新抛出之前记录错误也是一个好主意。例如

public void doSomething() throws MyException {
try {
// code which may throw HibernateException
} catch (HibernateException e) {
logger.log("Caught HibernateException", e);
throw new MyException("Caught HibernateException", e);
}
}

关于java - 在Java中,如果发生异常,如何设置返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2945545/

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