Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can executeQuery(字符串sql)函数';是否将返回值类型化为字符串数组?_Java_Sql_Arrays_Jdbc_Resultset - Fatal编程技术网

Java Can executeQuery(字符串sql)函数';是否将返回值类型化为字符串数组?

Java Can executeQuery(字符串sql)函数';是否将返回值类型化为字符串数组?,java,sql,arrays,jdbc,resultset,Java,Sql,Arrays,Jdbc,Resultset,我有以下代码:- 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

我有以下代码:-

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");
由于我的代码只返回一个包含字符串的列,我可以将行强制转换为:- 字符串[]数组=pst.executeQuery()

因为迭代resultset并设置properties.setProperty(“mail.imap.host”,rs.toString())等属性

这真的很难

这里有没有更简单的解决方案,以避免迭代整个数组并逐个检查它

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++;
}

有更简单的方法吗?回答您的问题:
不,不可能,因为(来自PreparedStatement javadoc)

执行此PreparedStatement对象中的SQL查询并返回 查询生成的ResultSet对象

您不能更改此签名

您的目的是在
数组[]
变量中返回整个
ResultSet
,对于较大的ResultSet,这可能会导致
OutOfMemoryException

您可以考虑使用SpringJDBC支持,并轻松使用
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);
    }
  }
}

如果您可以建议任何其他设置属性的方法,那么您的答案会更容易接受:“if(i==2)properties.setProperty(“mail.imap.port”,rs.toString());”或者可能是一个更优雅的解决方案,一个接一个地获得一处房产。提前谢谢