2010-09-14 107 views
2

我有一个返回查询结果的函数。输入参数是SQL语句和要检索的字段,而输出是查询的结果。正如所料,数据库包含多种数据类型。有没有一个通用的返回类型,我可以指定的功能?如何解释Java函数的未知返回类型

下面的代码检索字符串...我需要改变这个返回Integer类型,最好不写另一个函数。

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

的可能是一个更好的方式来做到这一点,但你总是可以有你的函数返回一个Object - 那么这将有被丢在任何你真正希望得到的。

但是,如果你这样做,也许有多种方法的各种数据类型,你可能会更容易。

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

1

一种含粗的解决办法是返回一个对象,而不是字符串或Integer.Later可以键入它转换可以是字符串或整数(有if语句并使用instanceOf())

4

可能最好的方法是使用两种不同的方法调用同一个“基”方法。

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(); 
+0

5年迟到了,但刚开始几个月前学习了java。在你最后的例子中。对于正在播放的本地变量,@SuppressWarnings(“unchecked”)是否会出现这种情况?这一直是我仅仅使用动态语言而挣扎的东西。 – ptierno 2015-10-15 04:39:22

1

errr,你有一个连接功能,没有连接,它正在连接,然后执行。不如把所有的代码执行这一职能的,只是有它做连接:

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);