2017-05-07 3 views
1

これは私のコードです 私はStringをattrに変換しています(attrは列名です)。フィールドが存在しない場合、それは、SQL例外動的にSetter in java

public ArrayList<MedicineParam> viewParticularDataOnClick(String medName, 
      String attr) { 

     ArrayList<MedicineParam> newList = new ArrayList<MedicineParam>(); 
      try{ 
     Class.forName(DRIVER); 

      String selectTableSQL = "SELECT "+attr+", companyname FROM 
      medicineinfo WHERE companyname != 'doecompany' AND medicinename = '"+medName+"'"; 
      System.out.println(selectTableSQL); 
      Statement statement = this.checkconnection().createStatement(); 
      ResultSet rs = statement.executeQuery(selectTableSQL); 
      final String s = "medici.set"+attr; 
      while (rs.next()) { 
       MedicineParam medici =new MedicineParam(); 
       if(rs.getString("companyname") != null) 
       medici.setCompanyname(rs.getString("companyname")); 
       if(rs.getString(attr) != null) 

       medici.set...??.....(rs.getString(attr)); // THIS LINE how to set the setter w r t the name of attr 
       newList.add(medici); 
      } 
      rs.close(); 
      statement.close(); 
      this.checkconnection().close(); 
      } 
     catch(Exception e){ 
     } 

      return newList; 
    } 

をスローしますので、投与量はまた、私は

if(rs.getString("dosage") != null) 
medici.setDosage(rs.getString("dosage")); 

を使用傾けるようにも......自分自身を設定する必要があります

public class MedicineParam { 

private long id; 

private String companyname; 
private String medicineName; 
private String description; 
private String dosage; 
private String sideEffects; 
private String warnings; 
private String overdose; 
private String interaction; 
private String url; 
//setter 
//getter... 

} 

助けが必要ですか?

+0

。それとも良い設計のようには聞こえないので、コードを再設計してください。 – Michael

+0

'medicineinfo'テーブルは実際にどのように見えますか?ユーザーの入力から列名を動的に取得することはまれですので、問題をもう少し詳しく説明すると、おそらくこれを行うためのより良い方法があります。 'attr'値はどこから来ますか? –

+0

@MickMnemonicテーブルの列名は、MedicineParamのオブジェクトとまったく同じです。if(rs.getString( "companyname")!= null) medici.setCompanyname(rs.getString( "companyname")); if(rs.getString(attr)!= null) medici.set ... ??(rs.getString(attr)); 'この行のcompanynameはテーブルの列で、setCompanynameは値を設定します。これは行は大丈夫ですが、私は動的にattr変数の列のパラメータ名を送信しています.iは、それに応じてMedicineParamセッターとattrコードの上から来るこのメソッドの変数を設定する必要があります – doe

答えて

0

一部の列にゲッターとセッターを作成できない場合は、これらの列をMedicineParamオブジェクトの特定のマップまたは汎用マップに追加できます。

MedicineParamの追加:あなたのwhileループで

private Map<String, String> attributes; 

public void addAttribute(String attribute, String value) { 
    if (this.attributes == null) { 
     this.attributes = new HashMap<String, String>(); 
    } 

    this.attributes.put(attribute, value); 
} 

public Map<String, String> getAttributes() { 
    return attributes; 
} 

public void setAttributes(Map<String, String> attributes) { 
    this.attributes = attributes; 
} 

、この使用:あなたはあなたがする必要がある場合は、より一般的なマップを持っているMap<String, Object>されるマップを変更することができます

if(rs.getString(attr) != null) { 
    medici.addAttribute(attr, rs.getString(attr)); 
} 

を。

あなたは、オブジェクトから値を取得することができます:あなたはゲッター機能を帰する反射や属性名のマップを使用することができ

medici.getAttributes().get("key"); 
+1

本当にありがとう..感謝! :) – doe

関連する問題