2013-07-02 60 views
0

我希望能够将任何对象传递给​​方法,例如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

重载不起作用? – johnchen902

回答

0

那么你为什么不把它定义为:

public boolean searchO(Object o) { 

,并修改该行使用的o.toString()代替o

ResultSet rs = st.executeQuery("select * from `student` where `fname` = '" + o.toString() + "' ;"); 

你只需要确保,无论您传入的方法返回所需值toString()方法。

1

既然你将使用你的参数作为一个字符串过滤器(假设fname是为varchar /文本类型数据库列),离开类型为字符串更preferrable

你可能会想改变参数类型为public boolean searchO(Object o)并呼吁o.toString()会做的伎俩,但它只是介绍错误如果以后走下赛场,你从/到字符串传递一种不正确的toString()实施

类型转换/转换并不难在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

你可能有兴趣使用重载之前调用它。

您将有两种方法。

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。请记住,切勿将变量的值连接到任何查询字符串。

+0

SQL注入注释+1 –

+0

哦,是的,+1重载和SQL注入+1。请不要依赖'toString()'的代码 –

相关问题