Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Error buscador Java con Derby

Estas en el tema de Error buscador Java con Derby en el foro de Java en Foros del Web. Hola a todos, estoy portando una aplicacion con Mysql a Derby, podeis ayudarme con este error en el buscador. Este es el error Código: java.sql.SQLSyntaxErrorException: ...
  #1 (permalink)  
Antiguo 17/12/2015, 16:52
Usuario no validado
 
Fecha de Ingreso: abril-2012
Mensajes: 134
Antigüedad: 12 años
Puntos: 0
Error buscador Java con Derby

Hola a todos, estoy portando una aplicacion con Mysql a Derby, podeis ayudarme con este error en el buscador.

Este es el error

Código:
java.sql.SQLSyntaxErrorException: No authorized routine named 'LIKE' of type 'FUNCTION' having compatible arguments was found.
y este es el código, en Mysql funcionaba bien.

Código:
@Override
    public List<Customer> findCustomerBySelection(String field, String value) throws SQLException {
        List<Customer> listCustomer = null;
        try {
            this.connect();
            PreparedStatement st = this.link.prepareStatement("SELECT * FROM customer WHERE " + field + " LIKE ?");
            st.setString(1, "%" + value + "%");
            listCustomer = new ArrayList();
            ResultSet rs = st.executeQuery();
            while (rs.next()) {
                Customer customer = new Customer();
                customer.setIdCustomer(rs.getInt("id_customer"));
                customer.setFirstName(rs.getString("customer_first_name"));
                customer.setLastName(rs.getString("customer_last_name"));
                customer.setAddress(rs.getString("customer_address"));
                customer.setPostalCode(rs.getInt("customer_postal_code"));
                customer.setPhone(rs.getInt("customer_phone"));
                customer.setEmail(rs.getString("customer_email"));
                listCustomer.add(customer);
            }
            rs.close();
            st.close();
        } catch (Exception e) {
            throw e;
        } finally {
            this.disconnect();
        }
        return listCustomer;
    }
Muchas Gracias
  #2 (permalink)  
Antiguo 19/12/2015, 12:04
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Error buscador Java con Derby

Buenas,

Aparentemente el valor de tu variable value esta vacio (''), por lo que al final estas construyendo una consulta:

Código SQL:
Ver original
  1. ... LIKE '%%'

Esa consulta en derby devuelve exactamente el error que has puesto.
http://apache-database.10148.n7.nabb...-td104802.html

Tienes que controlar por lo tanto si el campo value esta vacio o no.


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 19/12/2015, 16:46
Usuario no validado
 
Fecha de Ingreso: abril-2012
Mensajes: 134
Antigüedad: 12 años
Puntos: 0
Respuesta: Error buscador Java con Derby

Hola Profesor, ante todo gracias por tu respuesta como siempre.

En el siguiente código te muestro el uso, como ves le paso el contenido del jtextfiel a la variable "value", esto funcionaba perfectamente con mysql, me falla con la migración a derby. Un saludo y gracias

Código:
 // Añado el buscador segun introduzco los datos en el campo de texto
        txtSearchCustomer.addKeyListener(new KeyAdapter() {
            @Override
            public void keyReleased(KeyEvent arg0) {
                // Vacio la tabla//
                modelTableCustomer.setRowCount(0);
                // Obtengo el valor del radiobutton
                String field = null;
                if (jrbSearchCustomerById.isSelected()) {
                    field = "id_customer";
                } else if (jrbSearchCustomerByPhone.isSelected()) {
                    field = "customer_phone";
                } else if (jrbSearchCustomerByEmail.isSelected()) {
                    field = "customer_email";
                }

                //Obtengo el valor del textfield
                String value = txtSearchCustomer.getText();
                // Relleno la tabla por la seleccion del combo
                try {
                    CustomerDAO customer = customerFactory.createCustomerDAO();
                    // Añado los customeros a la tabla
                    for (Customer cust : customer.findCustomerBySelection(field, value)) {
                        modelTableCustomer.addRow(new Object[]{cust.getIdCustomer(), cust.getFirstName(),
                            cust.getLastName(), cust.getAddress(), cust.getPostalCode(), cust.getPhone(), cust.getEmail()});
                    }
                } catch (SQLException ex) {
                    Logger.getLogger(ManagementView.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
                }
            }
        });

Tras leer el enlace que pones, si he detectado que en los campos que no son Integer funciona perfectamente. Entiendo que tendría que hacer un cast de integer a varchar en la consulta, pero de momento las pruebas que estoy haciendo me dan error.

Última edición por maurikius1983; 19/12/2015 a las 17:15
  #4 (permalink)  
Antiguo 19/12/2015, 17:19
Usuario no validado
 
Fecha de Ingreso: abril-2012
Mensajes: 134
Antigüedad: 12 años
Puntos: 0
Respuesta: Error buscador Java con Derby

Tras las pruebas ya he dado con la clave, he hecho un cast de integer a char, ya que el cast a varchar no me funcionaba, la consulta quedaría así:

PreparedStatement st = this.link.prepareStatement("SELECT * FROM customer WHERE CAST(" + field + " AS CHAR(10)) LIKE ?");

PD: Muchas gracias Profesor por la orientación.
  #5 (permalink)  
Antiguo 20/12/2015, 05:07
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Error buscador Java con Derby

Buenas,

O sea, que el problema es que el campo sobre el que querias hacer like era numerico?


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #6 (permalink)  
Antiguo 20/12/2015, 06:57
Usuario no validado
 
Fecha de Ingreso: abril-2012
Mensajes: 134
Antigüedad: 12 años
Puntos: 0
Respuesta: Error buscador Java con Derby

Así es, no se si es común que suceda estas cosas en derby, pero en mysql nunca me lo he encontrado, pero no solo eso,sino que al hacer cast a tipo VARCHAR tampoco funcionaba, como puedes comprobar haciendo cast a tipo CHAR se soluciona.

Un saludo

Etiquetas: buscador, sql, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:51.