1

私は次のコードを持っています:-

sql = "select Col3 from MyOption where OptionKey = (?,?,?,?) and ID = " + _Id;

pst = conn.prepareStatement(sql);
pst.setString(1, "Mail.IMAP.Server");
pst.setString(2, "Mail.IMAP.Port");
pst.setString(3, "Mail.IMAP.AuthUser");
pst.setString(4, "Mail.IMAP.UseTLS");

私のコードは文字列を含む 1 つの列のみを返すため、行を :- String[] array = pst.executeQuery(); に型キャストできますか? ?

結果セットを反復し、properties.setProperty("mail.imap.host", rs.toString()); のようなプロパティを設定するためです。

は本当に難しいです。

配列全体を反復して 1 つずつチェックするのを避けるために、ここでより簡単な解決策はありますか?

while (rs.next() && rs.toString().contains("imap")) {

int i = 1;

if(i==1)
properties.setProperty("mail.imap.host", rs.toString());
if(i==2)
properties.setProperty("mail.imap.port", rs.toString());
if(i==3)
properties.setProperty("mail.imap.auth", rs.toString());
if(i==4)
properties.setProperty("mail.imap.starttls.enable", rs.toString());
i++;
}

これを行う簡単な方法はありますか?

4

1 に答える 1

2

あなたの質問への回答:
いいえ、できません (PreparedStatement javadoc から)

ResultSet executeQuery() が SQLException をスローする

この PreparedStatement オブジェクトで SQL クエリを実行し、クエリによって生成された ResultSet オブジェクトを返します。

この署名を変更することはできません。

あなたの意図は変数全体を返すことResultSetArray<>[]あり、大きな結果セットの場合、これはOutOfMemoryException. Spring JDBC サポートとJDBCTemplate.queryForList()を使用してマッピングを簡単
に利用することを考えることができますResultSet

編集:
コードについての最良の選択は、クエリを次のように変更することです:

select Col3,MyOption from MyOption where OptionKey in (?,?,?,?) and ID = " + _Id";

while(rs.hasNext()) {
  String option = rs.getString(2);
  String optionValue = rs.getString(1);
  String propertyName = null;
  if(option.contains("imap")) {
    switch(options) {
      case "Mail.IMAP.Server":
        propertyName = "mail.imap.host";
        break;
      case "Mail.IMAP.Port":
        propertyName = "mail.imap.port";
        break;
      case "Mail.IMAP.AuthUser":
        propertyName = "mail.imap.auth";
        break;
      case "Mail.IMAP.UseTLS":
        propertyName = "mail.imap.starttls.enable";
        break;
    }
    if(null != propertyName) {
      properties.setProperty(propertyName, optionValue);
    }
  }
}
于 2013-08-24T15:56:09.997 に答える