gpt4 book ai didi

java - Mysql 按可变字段排序

转载 作者:行者123 更新时间:2023-11-29 08:16:41 27 4
gpt4 key购买 nike

我正在尝试创建一个 mysql 选择查询,使用可更改的字段条件顺序。

此查询正在 Java 应用程序中运行。

查询是:

public static final String LECTURAREFADMINPAGFILTRO = "SELECT Agente.idAgente, Agente.nomAgente, Agente.emailAgente, Agente.nomDir, Agente.zonaAgente, Agente.paisAgente, Agente.equipoAgente, Agente.catAgente, Referencia.idReferencia,Referencia.nomMaterial, Referencia.tipoMaterial, Referencia.protocometa, Referencia.precio, Referencia.guidlineUso, Referencia.especialista, Solicitud.IdSolicitud, Solicitud.estSolicitud, AgenteSolicitud.prescriptor, AgenteSolicitud.stockAgente, AgenteSolicitud.stockagenteConf, AgenteSolicitud.undspropSist, AgenteSolicitud.undsconfAgente, AgenteSolicitud.undsEnvio, AgenteSolicitud.idAgenteSolicitud FROM AgenteSolicitud join Solicitud on AgenteSolicitud.Solicitud_idSolicitud=Solicitud.idSolicitud  and Solicitud.Agente_idAgente=AgenteSolicitud.Agente_idAgente and Solicitud.Peticion_idPeticion = AgenteSolicitud.Solicitud_Peticion_idPeticion and Solicitud.Peticion_Actividad_idActividad=AgenteSolicitud.Solicitud_Peticion_Actividad_idActividad join Agente on Agente.idAgente=Solicitud.Agente_idAgente join Actividad on Agente.Actividad_idActividad=Actividad.idActividad, Referencia where Referencia.idReferencia=Solicitud.Referencia_idReferencia and Actividad.nomActividad=? and Solicitud.estSolicitud='Activa' ORDER BY ? ASC LIMIT ? OFFSET ?";

那个?值作为参数传递,按条件排序,任何字段作为参数传递。

我已经在 squirrel 中运行了这个查询,并按字段“?”给出了顺序。字段值,查询成功。

但是,在Java应用程序中,当我执行相同的查询时,它并不关注按条件的顺序。

与查询相关的Java代码是:

@Override
public List<String> listaFiltro(String ciclo, String ordenacion, String limit, String offset) {
CRUD bd = new CRUD();
List<String> lista = new ArrayList<String>();
String[] valores = new String[4];
valores[0]=ciclo;
valores[1]=ordenacion;
valores[2]=limit;
valores[3]=offset;
try {
lista = bd.leer(Constantes.LECTURAREFADMINPAGFILTRO, valores);
}catch (Exception e) {
e.printStackTrace();
}

return lista;
}


public List <String> leer(String cadena, String [] valores) throws SQLException{
log.info("Entra en la función leer(String cadena, String [] valores)");
this.conectar();

List <String> listaDatos = new ArrayList <String> ();
try{

PreparedStatement stmt = con.prepareStatement(cadena);
System.out.println("Número de filas maximo "+stmt.getMaxRows());
if(valores != null){
for(int i=0; i< valores.length;i++){
stmt.setString(i+1,valores[i]);
}
}
ResultSet rs = null;
rs = stmt.executeQuery();
ResultSetMetaData rsmd = (ResultSetMetaData) rs.getMetaData();
int numeroColumnas= rsmd.getColumnCount();

while (rs.next()){
// contar_filas++;
//Si la columna es solo 1, no hace falta que dividamos las columnas
if (numeroColumnas >1){
String fila ="";
for (int i=1;i<=numeroColumnas;i++){
fila=fila + "::" + rs.getString(i);
}
fila=fila+"%%";
listaDatos.add(fila);
}else{
listaDatos.add(rs.getString(1));
}
}

log.info("La lista total se compone de "+listaDatos.size()+ " elementos");
log.info("Los valores leidos son: " + listaDatos.toString());
if (stmt!=null) {
stmt.close();
}
}catch(Exception e){
log.info("CRUD: Ha ocurrido un error" );
log.info("CRUD: el error es " + e.getMessage().toString());
con.close();
e.printStackTrace();
}finally{
this.cerrarConexion();
}
log.info("Sale de la función leer(String cadena, String [] valores)");

return listaDatos;

}

“ordenacion”值实际上是我想要用来进行排序的字段名称。

知道我可能会错过什么吗?

预先感谢您的宝贵时间,

亲切的问候,

最佳答案

  1. 不确定是否可以参数?订购依据。如果你使用。生成的 SQL 像这样 ORDER BY 'abc'。不确定这个工作。

  2. 你可以使用?对于 LIMIT 和 OFFSET 但它的数据类型是 INT,而不是 String,所以你必须使用 setInt。

  3. 您可以在 leer 函数中执行此操作(构建您的 sql)

    字符串 sql = "选择你的列... WHERE ... AND Actividad.nomActividad=? AND Solicitud.estSolicitud='Activa' AND ORDER BY "+ valores[1] + "ASC LIMIT "+ valores[2] + “OFFSET ” + valores[2];

    PreparedStatement stmt = con.prepareStatement(sql);

    stmt.setString(1, valores[0]);//只有 1 个参数

    ...

关于java - Mysql 按可变字段排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20476475/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com