如何考虑Java函数的未知返回类型

时间:2010-09-14 20:30:09

标签: java mysql

我有一个返回查询结果的函数。输入参数是SQL语句和要检索的字段,而输出是查询的结果。正如所料,数据库包含多种数据类型。是否有泛型返回类型我可以指定要具有的函数?

下面的代码检索字符串...我需要更改它以返回整数类型,最好不要编写其他函数。

public static String dbConnect(String sql,String field) throws SQLException, ClassNotFoundException {
    Statement stmt;
    String DB_URL;
    Class.forName("com.mysql.jdbc.Driver");
    DB_URL="jdbc:mysql://connectionURL.net:3306/db?autoReconnect=true"; 
    Connection conn =DriverManager.getConnection(DB_URL,DB_USER, DB_PWD);
        stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery(sql);
    String result=null;
    while(rs.next()){
            result  = rs.getString(field);
    }
    rs.close();
    stmt.close();
    conn.close();
    return result;
}

4 个答案:

答案 0 :(得分:5)

这可能是一种更好的方法,但是你可以随时让你的函数返回Object - 然后必须将它投射到你真正希望得到的任何东西。

但是如果你这样做,也许你想要的各种数据类型可能更容易。

(顺便说一句,为你运行的每个查询重新连接到数据库似乎是一个坏主意。)

答案 1 :(得分:5)

可能最好的方法是使用两种不同的方法来调用相同的“基本”方法。

public static ObjectThatCanGetItemAsAnything getItemGenerator(){
    return objectThatCanGetItemAsAnything;
} 

public static String getItemAsString(){
    return getItemGenerator().getStringValue();
}

public static String getItemAsInteger(){
    return getItemGenerator().getIntegerValue();
}

String lol = MyClass.getItemAsString();
Integer test = MyClass.getItemAsInteger();

另一种方法是使用泛型方法,这样你就可以调用getItem()并返回你想要的类型。

public static <T> T getItem(){
    return (T) myObject;
}

String lol = MyClass.<String>getItem();
Integer test = MyClass.<Integer>getItem();

你也可以返回Object(如果你没有设置泛型,上面的方法将会这样做),然后在你的应用程序中将其强制转换。

public static Object getItem(){
    return myObject;
}

String lol = (String) MyClass.getItem();
Integer test = (Integer) MyClass.getItem();

答案 2 :(得分:2)

错误,你有一个没有连接的连接功能,它正在连接,然后执行。最好将所有执行代码从该函数中拉出来,然后让它进行连接:

public static Connection dbConnect() throws SQLException, ClassNotFoundException {

    String DB_URL;
    Class.forName("com.mysql.jdbc.Driver");
    DB_URL="jdbc:mysql://connectionURL.net:3306/db?autoReconnect=true"; 
    Connection conn =DriverManager.getConnection(DB_URL,DB_USER, DB_PWD);
    return conn;

}

然后创建一个新函数来执行:

public String execute(String sql,String field, Connection conn)
{
    Statement stmt;
        stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery(sql);
    String result=null;
    while(rs.next()){
            result  = rs.getString(field);
    }
    rs.close();
    stmt.close();
    return result;
}

然后让你的调用代码将字符串转换为int,如果需要的话

Connection conn = MyClass.dbConnect();
result = mything.execute(someSql, field, conn);
Integer i = Integer.pareseInt(result);

答案 3 :(得分:1)

一个原始解决方案是返回一个Object而不是String或Integer.Later你可以输入强制转换为String或Integer(有if语句并使用instanceOf())