preparestatement preparedstatement parametros obtener nombre los funcionamiento datos consultas con columna array java mysql jdbc prepared-statement query-parameters

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]); }