如何解释Java函数的未知返回类型

如何解释Java函数的未知返回类型,java,mysql,Java,Mysql,我有一个返回查询结果的函数。输入参数是SQL语句和要检索的字段,而输出是查询的结果。正如预期的那样,数据库包含多种数据类型。我是否可以指定要使用的函数的泛型返回类型 下面的代码检索字符串…我需要将其更改为返回整数类型,最好不用编写其他函数 public static String dbConnect(String sql,String field) throws SQLException, ClassNotFoundException { Statement stmt; Stri

我有一个返回查询结果的函数。输入参数是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;
}

这可能是一种更好的方法,但您始终可以让函数返回一个
对象
——然后必须将该对象转换为您实际希望得到的任何对象

但是如果您这样做,那么对于您期望的各种数据类型使用多个方法可能会更容易


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

一个粗略的解决方案是返回一个对象,而不是字符串或整数。稍后您可以将其强制转换为字符串或整数(Have if语句并使用instanceOf())

,最好的方法是使用两个不同的方法调用同一个“base”方法


另一种方法是使用泛型方法,这样您可以调用
getItem()
,它将返回您想要的类型

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

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

呃,您有一个连接函数,它不是连接,而是连接,然后执行。最好将所有执行代码从该函数中取出,并让它执行连接:

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

这已经晚了5年,但几个月前才开始学习java。在你的最后一个例子中。对于正在强制转换的局部变量,
@SuppressWarnings(“unchecked”)
是否会出现这种情况?这是我在仅仅使用动态语言的过程中遇到的困难。
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;
}
Connection conn = MyClass.dbConnect();
result = mything.execute(someSql, field, conn);
Integer i = Integer.pareseInt(result);