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