0

我希望能够将任何对象传递给searchO方法,例如td1.searchO("akash")or 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;
    }
}
4

3 回答 3

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

于 2013-07-02T11:11:11.523 回答
1

由于您将使用您的参数作为字符串过滤器(假设fname是一个具有 varchar / text 类型的 db 列),因此将类型保留为 String 更可取

您可能认为将参数类型更改为public boolean searchO(Object o )并调用o.toString()就可以解决问题,但如果稍后您传递一个没有正确toString()实现的类型,它只会引入错误

在 Java 中从 / 到 String 的类型转换/转换并不难

// 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());
于 2013-07-02T11:00:46.187 回答
0

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

public boolean searchO(Object o) {

并修改此行以使用o.toString()而不是o

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

您只需要确保您传入的任何内容都返回所需的toString()方法值。

于 2013-07-02T10:56:05.717 回答