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

詹姆士 :

嘿,我是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;

    }

}
彼得·土耳其语:

如果引发异常,则该方法没有返回正常值。通常,编译器能够检测到这一点,因此它甚至不会通过“需要返回”样式的警告/错误来困扰您。有时,当无法执行此操作时,您需要提供一个“ alibi”返回语句,该语句实际上永远不会执行。

像这样重新定义您的方法

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块中重新引发异常不是一个好主意。唯一可行的解​​决方案是您需要在不同的异常类型之间进行转换。例如,一种称为的方法抛出了一个您不能或不想向上传播的异常类型(例如,因为它属于专有库或框架,并且您希望将其余代码与其隔离)。

即使这样,重新抛出异常的正确方法是将原始异常传递到新的构造函数中(标准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);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如果在循环期间发生异常:如何在传递异常之前返回中间结果?

如果评估在 Ruby 中返回 nil,我如何引发异常?

在IntelliJ中设置SonarLint时发生异常

如果递归函数中发生异常,Python将返回NoneType

Java-如果发生异常,连接/流是否已经关闭,以及如何正确处理?

基于接口的投影getter方法使异常,如果返回类型为的java.sql.Timestamp

如果发生任何异常,如何重试try块中的特定代码?

如果发生异常,如何在Executor服务中停止可调用任务

如果返回类型是xposed中的list <string>,我如何钩住?

如果查询在MySql中返回空值,如何设置0?

如何设置通用返回类型

java MongoDb 异常错误的返回类型

Ranorex:如果发生异常,如何停止测试用例?

如果发生任何异常,如何使Task.WaitAll()中断?

如何检查Java中抛出了哪种异常类型?

如何在Java中创建自定义异常类型?

重新启动测试中硒如果发生某些异常

如何在JAVA中的异常上设置消息?

在Java中设置异常原因

在Java中设置异常原因

如果Java文件抛出异常,如何返回非零退出代码

在python中捕获错误时如何使异常发生异常?

如果没有返回数据,如何在 postgres 中引发异常

发生异常。_CastError(类型“Null”不是类型转换中“Map<dynamic, dynamic>”类型的子类型)

如何在Java中使用一个PrintStream中找出发生的异常

如果 IF() 函数返回 FALSE 和 END 查询,如果它在 mysql 中返回 TRUE,如何设置 WHERE 条件

使用NodeJS SDK引发错误时,如何在Application Insights中设置异常类型?

Spring AOP:如何使用无效的返回类型在异步方法中抛出异常

TypeScript子类:如何设置父类中定义的方法的参数类型和返回类型