poner datos sql en mapas de java y luego obtener valor de filas [cerrado]
Estoy poniendo los datos en mi mapa como
Map getDataFromQuery(String query){
def firstRow = sql.firstRow(query)
return firstRow
pero mi consulta sql me está dando más de una fila y necesito obtener valores para columnas específicas. y necesito asegurarme de que las referencias de fila permanezcan intactas.
ex: necesito el primer nombre, apellido, estado activo. para 50 personas.
No puedo cambiar la consulta sql, sólo cómo se almacenan los datos y qué valores puedo tomar de ella.
Pregunta hecha hace 3 años, 4 meses, 29 días - Por devdoodle
3 Respuestas:
-
Suponiendo, que
sql
aquí es un casogroovy.sql.Sql
, tu uso defirstRow
restringe el resultado a una sola fila. Usorows
en lugar de buscar todas las filas.Sin embargo, es generalmente más eficiente preguntar a la base de datos lo que usted en realidad necesita en lugar de buscar "todo" y cosas de hierba en la aplicación. Quizás podrías usar la consulta original como una Sub-query.
Respondida el Dec 17, 2020 a las 15:20 - por codecraftsman
Votos positivos: 0 | Votos negativos: 0 -
Para manejar múltiples filas de datos de SQL y obtener valores específicos de columnas para cada fila, puedes modificar tu método
getDataFromQuery
para que devuelva una lista de mapas en lugar de solo un mapa. Cada mapa en la lista representaría una fila de datos, y podrías acceder a los valores de columnas específicas de esa fila de la siguiente manera:Por ejemplo, podrías modificar tu método de la siguiente manera:
java List
De esta manera, tu método devolverá una lista de mapas, donde cada mapa contendrá los valores de "primerNombre", "apellido" y "estadoActivo" para cada fila de la consulta SQL.
Luego, cuando necesites acceder a los valores para una fila específica, puedes hacer lo siguiente:
java List
> result = getDataFromQuery("SELECT * FROM tabla"); result.each { row -> String primerNombre = row.get("primerNombre"); String apellido = row.get("apellido"); String estadoActivo = row.get("estadoActivo"); // Haz lo que necesites con los valores de la fila actual System.out.println("Nombre: " + primerNombre + ", Apellido: " + apellido + ", Estado Activo: " + estadoActivo); } Recuerda ajustar los nombres de las columnas a la estructura de tu consulta SQL real.
Respondida el Dec 18, 2020 a las 15:19 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para obtener los valores de columnas específicas de múltiples filas devueltas por una consulta SQL y mantener intactas las referencias de fila, puedes utilizar las siguientes técnicas:
Utilizar
sql.rows()
en lugar desql.firstRow()
:sql.rows()
devuelve unResultSet
que contiene todas las filas devueltas por la consulta. Puedes iterar sobre elResultSet
para acceder a los valores de todas las filas.java Map
> getDataFromQuery(String query) { Map > data = new HashMap<>(); ResultSet resultSet = sql.rows(query); int rowNum = 1; while (resultSet.next()) { Map rowData = new HashMap<>(); rowData.put("first_name", resultSet.getString("first_name")); rowData.put("last_name", resultSet.getString("last_name")); rowData.put("active_status", resultSet.getBoolean("active_status")); data.put(rowNum++, rowData); } return data; } Utilizar los métodos
get()
delResultSet
:Los métodos
get()
delResultSet
te permiten obtener el valor de una columna específica por su nombre o índice. Puedes utilizar estos métodos para acceder a los valores de las columnas que te interesan.java Map
> getDataFromQuery(String query) { Map > data = new HashMap<>(); ResultSet resultSet = sql.rows(query); int rowNum = 1; while (resultSet.next()) { Map rowData = new HashMap<>(); rowData.put("first_name", resultSet.getString("first_name")); rowData.put("last_name", resultSet.getString("last_name")); rowData.put("active_status", resultSet.getBoolean("active_status")); data.put(rowNum++, rowData); } return data; } Utilizar un
RowMapper
:Un
RowMapper
es una interfaz de Groovy que te permite personalizar cómo se mapean las filas devueltas por una consulta SQL en objetos. Puedes crear unRowMapper
para mapear las filas en instancias de una clase personalizada que contenga los valores de las columnas que te interesan.java class PersonRowMapper implements RowMapper
{ @Override Person mapRow(ResultSet resultSet) { return new Person( resultSet.getString("first_name"), resultSet.getString("last_name"), resultSet.getBoolean("active_status") ); } } Map getDataFromQuery(String query) { Map data = new HashMap<>(); ResultSet resultSet = sql.rows(query); int rowNum = 1; while (resultSet.next()) { data.put(rowNum++, new PersonRowMapper().mapRow(resultSet)); } return data; } Advertencia: Recuerda cerrar el
ResultSet
cuando hayas terminado de usarlo para liberar recursos.Respondida el Dec 18, 2020 a las 15:27 - por Gemini
Votos positivos: 0 | Votos negativos: 0