Ir al contenido

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.

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.

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.

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();
}
}
}

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í: BIGINTLong, INTEGERInteger, TIMESTAMPTimestamp, 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();
}
}
}

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();
}
}
}