嘿,我是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] 删除。
我来说两句