我希望能够将任何对象传递给searchO
方法,例如td1.searchO("akash")
或td1.searchO(1)
。它应该接受所有对象,因为对象类是所有对象的超类。
我该怎么做?
public boolean searchO(String o ) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
Statement st=null;
Connection con=test1.getConnection();
st=con.createStatement();
ResultSet rs=st.executeQuery("select * from `student` where `fname` = '" + o + "' ;");
//System.out.println("full name is "+rs.getString("lname")+" "+rs.getString("fname"));
if(rs.next()==true){
System.out.println("full name is "+rs.getString("lname")+" "+rs.getString("fname"));
return true;
}
else{
return false;
}
}
答案 0 :(得分:2)
您可能对使用重载感兴趣。
您将有两种方法。
public boolean searchO(int o ) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
return searchO(String.valueOf(o));
}
public boolean searchO(String o ) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
//same no changes as in your original code
}
安全注意:您的SQL查询容易受到SQL注入攻击。要避免此威胁,请使用PreparedStatement。请记住,永远不要将变量的值连接到任何查询字符串。
答案 1 :(得分:1)
由于您将使用参数作为字符串过滤器(假设fname
是具有varchar / text类型的db列),因此将类型保留为String更为可取
您可能会考虑将参数类型更改为public boolean searchO(Object o )
,并且调用o.toString()
将会解决这个问题,但是如果稍后您在通过没有正确toString()
类型的类型的情况下会引入错误实施
类型转换/从/到String的转换在Java中并不难
// From integer to string
int i = 10;
String s = i + "";
// From string to integer
String s = "10";
int i = Integer.parseInt(s);
如果您有自定义类,只需覆盖其toString()
方法并在传递给searchO()
方法之前调用它
public class MyClass {
//...
@Override
public String toString() {
return //...
}
}
// Somewhere else in your code
MyClass c = // fetch a MyClass instance..
searchO(c.toString());
答案 2 :(得分:0)
那你为什么不把它定义为:
public boolean searchO(Object o) {
并修改此行以使用o.toString()
代替o
:
ResultSet rs = st.executeQuery("select * from `student` where `fname` = '" + o.toString() + "' ;");
您只需要确保传入的内容为toString()
方法返回所需的值。