Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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';将数组传递给SQL查询;s准备的声明_Java_Mysql_Jdbc_Prepared Statement_Query Parameters - Fatal编程技术网

使用Java';将数组传递给SQL查询;s准备的声明

使用Java';将数组传递给SQL查询;s准备的声明,java,mysql,jdbc,prepared-statement,query-parameters,Java,Mysql,Jdbc,Prepared Statement,Query Parameters,我在使用Java的预处理语句将数组传递到SQL查询时遇到了一些问题。我首先尝试了sourceforge驱动程序,但是当我调用setArray方法时,会出现AbstractMethodError。由于不知道该解决方案,我换用了Microsoft sql Server驱动程序,但现在我得到了一个完全不同的错误,即“java.sql.SQLFeatureNotSupportedException:不支持此操作”。我尝试了很多方法来解决此问题,但似乎没有任何效果 我的Java代码看起来类似于我在这里和互

我在使用Java的预处理语句将数组传递到SQL查询时遇到了一些问题。我首先尝试了sourceforge驱动程序,但是当我调用setArray方法时,会出现AbstractMethodError。由于不知道该解决方案,我换用了Microsoft sql Server驱动程序,但现在我得到了一个完全不同的错误,即“java.sql.SQLFeatureNotSupportedException:不支持此操作”。我尝试了很多方法来解决此问题,但似乎没有任何效果

我的Java代码看起来类似于我在这里和互联网上看到的示例,如下所示:

PreparedStatement ps = connection.prepareStatement(query);
String[] suppliers = {"21","2774","120563","3714","59"};
ps.setArray(1, connection.createArrayOf("text", suppliers));
ResultSet rs = ps.executeQuery();
我的SQL查询示例。唯一真正感兴趣的一行是我添加了“?”字符的前一行,据我所知,这是我向SQL查询传递参数的方式

productsPrices.query = select contract.supplierid as 'hotelid' \
  , round((rate.s1/money.buy)*euro.sell,0) as "single" \
  , round((rate.s2/money.buy)*euro.sell,0) as "double" \
  ,service.Name as 'roomtype' \
  ,stock.alloc - stock.taken as 'stock.available' \
  , contract.notes as 'boardType' \
  , object.name as 'occupancy' \
  ,object.cap as 'capacity' \
  ,object.mincap as 'min capacity' \
  ,stock.date as 'date' \
from stock stock \
  inner join rate rate on stock.rateid = rate.id \
  inner join contract contract on rate.contractid = contract.id \
  inner join service service on contract.serviceid = service.ID \
  inner join object object on service.objectid = object.ID \
  inner join band band on contract.termsid = band.ID \
  inner join Money money on band.moneyid = money.id \
  inner join Money euro on euro.Name  = 'Euros' \
where stock.date > getdate() \
and stock.closed = 0 \
and (stock.alloc - stock.taken) > 0 \
and stock.date > getdate() \
      and contract.supplierid in (?) \
      and contract.Finish > GETDATE()

我通过动态生成带有所需数量的问号的字符串解决了同样的问题。 下面是一个片段:-

String param = "(";
for(int i=0;i<suppliers.length;i++){
param = param+"?,";
}
param = param.substring(0,param.length()-1);
param=param+")";

query = query + param;

PreparedStatement ps = connection.prepareStatement(query);

for(int i=0;i<suppliers.length;i++){
ps.setString(i+1,suppliers[i]);
}
String param=“(”;

对于(int i=0;我正在使用Microsoft SQL Server Web Edition(64位)版本10.50.1600.1:)谢谢。我回家后会尝试一下。:)