请看一段代码:
public Customer getCustomer(String id) throws BrokerException {
Customer customer;
Connection conn = getConnection();
try {
Statement smt = conn.createStatement();
String mySql = "SELECT FROM customer WHERE ssn = "+"'"+id+"'";
ResultSet rs = smt.executeQuery(mySql);
customer = new Customer(rs.getString("id"), rs.getString("name"),
rs.getString("addr"));
return customer;
}
catch (SQLException e) {
e.printStackTrace();
} }
编译器总是报错,说是没有返回值,可是我写return语句了啊,迷惑。还有,编译器还经常说我的有些类没有定义,但是我明明定义了啊,在同一个包下啊。这个错有时候出现,过一会就没了,不知道怎么回事。请高手赐教。
public Customer getCustomer(String id) throws BrokerException {
Customer customer;
Connection conn = getConnection();
try {
Statement smt = conn.createStatement();
String mySql = "SELECT FROM customer WHERE ssn = "+"'"+id+"'";
ResultSet rs = smt.executeQuery(mySql);
customer = new Customer(rs.getString("id"), rs.getString("name"),
rs.getString("addr"));
return customer;
}
catch (SQLException e) {
e.printStackTrace();
} }
编译器总是报错,说是没有返回值,可是我写return语句了啊,迷惑。还有,编译器还经常说我的有些类没有定义,但是我明明定义了啊,在同一个包下啊。这个错有时候出现,过一会就没了,不知道怎么回事。请高手赐教。
但是try里的teturn不一定会执行到(如果有错误的话就会跳到catch里了,所以会报错)
你在catch块中加入:
return null;试试
但是try里的teturn不一定会执行到(如果有错误的话就会跳到catch里了,所以会报错)
正解
e.printStackTrace();
return null;
}
try块中正常走的话没有问题
但是如果是出现异常的话跳到catch块中就没有返回值了 当然出错了
在catch中加个返回值语句
Customer customer= null ;
Connection conn = getConnection();
try {
Statement smt = conn.createStatement();
String mySql = "SELECT FROM customer WHERE ssn = "+"'"+id+"'";
ResultSet rs = smt.executeQuery(mySql);
customer = new Customer(rs.getString("id"), rs.getString("name"),
rs.getString("addr"));
}
catch (SQLException e) {
e.printStackTrace();
}
return customer;
}
public Customer getCustomer(String id) throws BrokerException {
Customer customer= null ;
Connection conn = getConnection();
try {
Statement smt = conn.createStatement();
String mySql = "SELECT FROM customer WHERE ssn = "+"'"+id+"'";
ResultSet rs = smt.executeQuery(mySql);
while(rs.next())
customer = new Customer(rs.getString("id"), rs.getString("name"),
rs.getString("addr"));
}
catch (SQLException e) {
e.printStackTrace();
}
return customer;
}