LegacySrv
LegacySrv es un servicio de Spring que proporciona métodos de acceso directo a la base de datos para ejecutar consultas SQL y HQL (Hibernate Query Language) en bruto. Acceda a él mediante ContextWrapper.getContext().getBean(LegacySrv.class) o inyéctelo con @Autowired. Paquete: com.openkm.db.service.
Ejecución de SQL
Sección titulada «Ejecución de SQL»executeSQL (desde Reader)
Sección titulada «executeSQL (desde Reader)»Descripción:
| Método | Valores de retorno | Descripción |
|---|---|---|
| executeSQL(Reader rd) | void | Lee y ejecuta un script SQL desde el Reader indicado, una sentencia por línea. Las líneas que empiezan por -- y las líneas en blanco se omiten. Los errores por línea se registran pero no abortan el script. El reader se cierra tras la ejecución. |
executeSQL (cadena de consulta)
Sección titulada «executeSQL (cadena de consulta)»Descripción:
| Método | Valores de retorno | Descripción |
|---|---|---|
| executeSQL(String query) | List<List |
Ejecuta una única sentencia SQL y devuelve el resultado como una lista de filas, donde cada fila es una lista de valores de columna como cadenas. Las columnas BLOB se devuelven como la cadena literal "BLOB". Para sentencias que no son SELECT (INSERT, UPDATE, DELETE), devuelve un resultado de una sola fila que contiene el número de filas afectadas. |
executeSQL (con parámetros)
Sección titulada «executeSQL (con parámetros)»Descripción:
| Método | Valores de retorno | Descripción |
|---|---|---|
| executeSQL(String query, Object… params) | List<List |
Ejecuta una sentencia SQL parametrizada usando marcadores ?. Tipos de parámetro admitidos: String, Integer, Long, java.sql.Date, java.sql.Time, java.sql.Timestamp, Boolean. Devuelve los resultados en el mismo formato que la sobrecarga sin parámetros. |
- SQL de ejemplo:
SELECT NBS_UUID, NBS_AUTHOR, NBS_NAME, NBS_NOTES FROM OKM_NODE_BASE WHERE NBS_AUTHOR = ? LIMIT 10;
Ejemplo:
package com.openkm;
import java.util.List;
import com.openkm.db.service.LegacySrv;import com.openkm.util.ContextWrapper;
public class Test {
public static void main(String[] args) { try { LegacySrv legacySrv = ContextWrapper.getContext().getBean(LegacySrv.class);
// Without parameters List<List<String>> results = legacySrv.executeSQL( "SELECT NBS_UUID, NBS_AUTHOR, NBS_NAME FROM OKM_NODE_BASE LIMIT 10;"); for (List<String> row : results) { System.out.println("uuid=" + row.get(0) + " author=" + row.get(1) + " name=" + row.get(2)); }
// With parameters List<List<String>> filtered = legacySrv.executeSQL( "SELECT NBS_UUID, NBS_NAME FROM OKM_NODE_BASE WHERE NBS_AUTHOR = ? LIMIT 5;", "jsmith"); for (List<String> row : filtered) { System.out.println("uuid=" + row.get(0) + " name=" + row.get(1)); } } catch (Exception e) { e.printStackTrace(); } }}executeSqlAsMap
Sección titulada «executeSqlAsMap»Descripción:
| Método | Valores de retorno | Descripción |
|---|---|---|
| executeSqlAsMap(String query) | List<Map<String, Object>> | Ejecuta una sentencia SQL SELECT y devuelve los resultados como una lista de mapas, donde cada clave del mapa es un nombre de columna y el valor es un objeto Java tipado. Los tipos de columna se mapean así: BIGINT → Long, INTEGER → Integer, TIMESTAMP → Timestamp, BLOB → "BLOB", el resto → String. Para sentencias que no son SELECT, devuelve un único mapa con la clave rowCount. |
| executeSqlAsMap(String query, Object… params) | List<Map<String, Object>> | Variante parametrizada de executeSqlAsMap. Acepta los mismos tipos de parámetro que la sobrecarga parametrizada de executeSQL. |
Ejemplo:
package com.openkm;
import java.util.List;import java.util.Map;
import com.openkm.db.service.LegacySrv;import com.openkm.util.ContextWrapper;
public class Test {
public static void main(String[] args) { try { LegacySrv legacySrv = ContextWrapper.getContext().getBean(LegacySrv.class); List<Map<String, Object>> results = legacySrv.executeSqlAsMap( "SELECT NBS_UUID, NBS_AUTHOR, NBS_SIZE FROM OKM_NODE_BASE LIMIT 5;"); for (Map<String, Object> row : results) { System.out.println("uuid=" + row.get("NBS_UUID") + " size=" + row.get("NBS_SIZE")); } } catch (Exception e) { e.printStackTrace(); } }}Ejecución de HQL
Sección titulada «Ejecución de HQL»executeHQL
Sección titulada «executeHQL»Descripción:
| Método | Valores de retorno | Descripción |
|---|---|---|
| executeHQL(String hql) | List | Ejecuta una única sentencia HQL (Hibernate Query Language). Para consultas SELECT y FROM, devuelve las entidades o proyecciones coincidentes como una lista de objetos (cada objeto puede ser una entidad o un Object[] para proyecciones multicolumna). Para sentencias que no son SELECT (UPDATE, DELETE, INSERT), ejecuta la actualización y devuelve una lista de un solo elemento que contiene el número de filas afectadas como Integer. |
Ejemplo:
package com.openkm;
import java.util.List;
import com.openkm.db.service.LegacySrv;import com.openkm.util.ContextWrapper;
public class Test {
public static void main(String[] args) { try { LegacySrv legacySrv = ContextWrapper.getContext().getBean(LegacySrv.class);
// Multi-column projection — each result is an Object[] List<Object> results = legacySrv.executeHQL( "SELECT nb.uuid, nb.author FROM NodeBase nb WHERE nb.name = 'okm:root'"); for (Object obj : results) { if (obj instanceof Object[]) { Object[] cols = (Object[]) obj; System.out.println("uuid=" + cols[0] + " author=" + cols[1]); } else { System.out.println(obj); } } } catch (Exception e) { e.printStackTrace(); } }}