Después de indagar en diferentes repositorios y sitios al terminar dimos con la respuesta que te mostraremos pronto.
Solución:
Existe una excelente manera de ejecutar scripts SQL desde Java sin leerlos usted mismo, siempre que no le importe tener una dependencia de Ant. En mi opinión, tal dependencia está muy bien justificada en su caso. Aquí hay un código de muestra, donde la clase SQLExec vive en ant.jar:
private void executeSql(String sqlFilePath)
final class SqlExecuter extends SQLExec
public SqlExecuter()
Project project = new Project();
project.init();
setProject(project);
setTaskType("sql");
setTaskName("sql");
SqlExecuter executer = new SqlExecuter();
executer.setSrc(new File(sqlFilePath));
executer.setDriver(args.getDriver());
executer.setPassword(args.getPwd());
executer.setUserid(args.getUser());
executer.setUrl(args.getUrl());
executer.execute();
No hay una forma portátil de hacer eso. Sin embargo, puede ejecutar un cliente nativo como un programa externo para hacer eso:
import java.io.*;
public class CmdExec
public static void main(String argv[])
try
String line;
Process p = Runtime.getRuntime().exec
("psql -U username -d dbname -h serverhost -f scripfile.sql");
BufferedReader input =
new BufferedReader
(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null)
System.out.println(line);
input.close();
catch (Exception err)
err.printStackTrace();
- La muestra de código se extrajo de aquí y se modificó para responder a la pregunta asumiendo que el usuario desea ejecutar un archivo de script PostgreSQL.
La biblioteca Flyway es realmente buena para esto:
Flyway flyway = new Flyway();
flyway.setDataSource(dbConfig.getUrl(), dbConfig.getUsername(), dbConfig.getPassword());
flyway.setLocations("classpath:db/scripts");
flyway.clean();
flyway.migrate();
Esto escanea las ubicaciones en busca de scripts y los ejecuta en orden. Los scripts se pueden versionar con V01__name.sql, por lo que si solo se llama a la migración, solo se ejecutarán aquellos que aún no se hayan ejecutado. Utiliza una tabla llamada ‘schema_version’ para realizar un seguimiento de las cosas. Pero también puede hacer otras cosas, consulte los documentos: flyway.
La llamada limpia no es necesaria, pero es útil para comenzar desde una base de datos limpia. Además, tenga en cuenta la ubicación (el valor predeterminado es “classpath: db / migration”), no hay espacio después del ‘:’, ese me atrapó.
Te mostramos comentarios y valoraciones
Tienes la posibilidad dar recomendación a esta noticia si te ayudó.