preparedstatement - obtener nombre columna resultset java
Pasar una matriz a una consulta SQL utilizando PreparedStatement de Java (1)
He estado teniendo problemas para pasar una matriz a una consulta SQL usando las declaraciones preparadas de Java. Primero probé el controlador de sourceforge, sin embargo, obtendría el AbstractMethodError cuando llamo al método setArray. Sin conocer la solución a la que cambié al controlador sqlserver de Microsoft, ahora obtengo un error completamente diferente, que es "java.sql.SQLFeatureNotSupportedException: esta operación no es compatible". Intenté un montón de cosas para tratar de resolver esto, pero parece que nada funciona.
Mi código de Java es similar a los ejemplos que he visto aquí y en Internet, y es el siguiente,
PreparedStatement ps = connection.prepareStatement(query);
String[] suppliers = {"21","2774","120563","3714","59"};
ps.setArray(1, connection.createArrayOf("text", suppliers));
ResultSet rs = ps.executeQuery();
Ejemplo de mis consultas SQL. La única línea de interés real es la línea anterior donde agregué el ''?'' carácter, que según entiendo es cómo paso un parámetro a una consulta 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()
Resolví el mismo problema al generar cadenas dinámicamente con el número requerido de signos de interrogación. Aquí hay un fragmento:
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]);
}