es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Consultas SQL con ‘IN’ en Java o Groovy: En Java: 1. Consulta básica con ‘IN’: “`java String[] ids = {“1”, “3”, “5”}; String sqlQuery = “SELECT * FROM tabla WHERE id IN (” + String.join(“,”, ids) + “)”; “` 2. Consulta parametrizada con ‘IN’: “`java List ids = Arrays.asList(“1”, “3”, “5”); String sqlQuery = “SELECT * FROM tabla WHERE id IN (” + String.join(“,”, Collections.nCopies(ids.size(), “?”)) + “)”; PreparedStatement statement = connection.prepareStatement(sqlQuery); for (int i = 0; i < ids.size(); i++) { statement.setString(i + 1, ids.get(i)); } ResultSet resultSet = statement.executeQuery(); ``` En Groovy: 1. Consulta básica con 'IN': ```groovy def ids = ["1", "3", "5"] def sqlQuery = "SELECT * FROM tabla WHERE id IN (${ids.join(',')})" ``` 2. Consulta parametrizada con 'IN': ```groovy def ids = ["1", "3", "5"] def sqlQuery = "SELECT * FROM tabla WHERE id IN (${ids.collect{ '?' }.join(',')})" def preparedStatement = connection.prepareStatement(sqlQuery) ids.eachWithIndex { id, index -> preparedStatement.setString(index + 1, id) } def resultSet = preparedStatement.executeQuery() “` Recuerda que debes reemplazar “tabla” con el nombre real de la tabla en tu base de datos y establecer la conexión adecuada antes de ejecutar las consultas.

He escrito una consulta SQL:

select sum(amount) as totalAmount 
from employee_account 
where id = 29967 
and repayment_status in ("MARKEDPAID", "PAID", "PENDING", "OVERDUE");

Esta consulta funciona bien en la consola de MySQL. Tengo que ejecutar esta consulta en Java usando:

String query = "";
int id = 123;
Connection connection = // código de conexión
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(query);

Escribo la consulta:

query = "select sum(amount) as totalAmount from employee_account where id = " + id + " and repayment_status in ";

¿Cómo paso "MARKEDPAID", "PAID", "PENDING", "OVERDUE" en la consulta de cadena anterior?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para pasar los valores MARKEDPAID, PAID, PENDING, OVERDUE en la cadena de consulta, puedes utilizar una declaración preparada y establecer los valores de los parámetros en la consulta SQL. Aquí tienes un ejemplo de fragmento de código:

    String query = "select sum(amount) as totalAmount from employee_account where id = ? and repayment_status in (?, ?, ?, ?)";
    
    int id = 29967;
    String[] statuses = {"MARKEDPAID", "PAID", "PENDING", "OVERDUE"};
    
    Connection connection = // código de conexión
    PreparedStatement ps = connection.prepareStatement(query);
    ps.setInt(1, id);
    for (int i = 0; i < statuses.length; i++) {
        ps.setString(i+2, statuses[i]);
    }
    
    ResultSet resultSet = ps.executeQuery();
    

    En este fragmento de código, ? se utiliza como marcador de posición para los parámetros en la consulta SQL. Los valores se establecen utilizando los métodos ps.setInt y ps.setString, que corresponden al índice del parámetro y al valor, respectivamente. El i+2 en el método ps.setString se utiliza para establecer el índice del parámetro a partir de 2 porque el primer parámetro ya se utiliza para el id.

Comments are closed.