0

または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;
    }
}
4

3 に答える 3

2

オーバーロードの使用に興味があるかもしれません。

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

引数を文字列フィルターとして使用するため ( fnamevarchar / text タイプの db 列であると仮定)、タイプを String のままにしておくことがより好ましい

パラメータの型を変更し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());
于 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 に答える