Erro ao instanciar uma classe com main(String args[]){}

Bom dia galera tudo beleza?

Estou tendo um problema que parece simples mas não estou conseguindo resolver.

Encontrei uma classe na internet que cria a base de dados para a aplicação rodando um arquivo.sql.

A classe funciona perfeitamente rodando ela diretamente, o problema ocorre quando tento instanciar ela em alguma outra classe.

Eu tentei isto pois pretendo utilizar um método que verifica se a base de dados já existe, e caso não, instanciar esta classe para criar a base de dados.

A classe: https://github.com/apache/ranger/blob/master/jisql/src/main/java/org/apache/util/sql/MySQLPLRunner.java

Quando tento instanciar em qualquer outra classe utilizando MySQLPLRunner criarbd = new MySQLPLRunner(); a execução falha:

Executing C:\Users\e001307\Documents\NetBeansProjects\OdinSWLM\dist\run1114622334\OdinSWLM.jar using platform C:\Program Files\Java\jdk1.8.0_66\jre/bin/java

Exception in Application start method
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.UnsupportedOperationException: Not supported yet.
at odinswlmanager.MySQLPLRunner.(MySQLPLRunner.java:52)
at odinswlmanager.OdinSwLManager.start(OdinSwLManager.java:22)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
… 1 more
Exception running application odinswlmanager.OdinSwLManager
Java Result: 1

Alguém saberia o porque isto está ocorrendo?

Obrigado :).

@victor.guiraldelli verifiquei que o construtor da sua classe existem alguns parâmetros, sendo assim ao instanciar um objeto dessa classe será necessário passar esses parâmetros (Connection, boolean, boolean, boolean).
Abaixo segue o construtor da sua classe para que você possa entender melhor o comentário acima.

public MySQLPLRunner(Connection connection, boolean autoCommit,
boolean stopOnError,boolean printDebug) {
this.connection = connection;
this.autoCommit = autoCommit;
this.stopOnError = stopOnError;
this.printDebug=printDebug;
}

Abraço.

1 curtida

A classe no link https://github.com/apache/ranger/blob/master/jisql/src/main/java/org/apache/util/sql/MySQLPLRunner.java não possui construtor sem parâmetros.

O fonte que você postou no link deve estar diferente do seu, pois o fonte do link apenas possui comentários na linha 52, mas o código que você está executando está lançando uma UnsupportedOperationException nessa linha.
Além do mais, o fonte do link faz parte do pacote org.apache.util.sql e o fonte que você está executando é do pacote odinswlmanager.

Posta o seu código que fica fácil de achar o erro.

Opa, obrigado pela resposta. Percebi o seguinte agora:

Quando coloquei o MySQLPLRunner criarbd = new MySQLPLRunner(); pela primeira vez, pediu para criar o construtor e eu coloquei para criar, ficou um construtor novo na classe do MySQLPLRunner.

Apaguei o construtor novo, mas ainda não sei o que precisa adicionar no MySQLPLRunner criarbd = new MySQLPLRunner(); para utilizar este construtor?

As conexões estão setadas na própria classe do MySQLPLRunner, fiquei confuso agora para estes parâmetros: (Connection connection, boolean autoCommit, boolean stopOnError,boolean printDebug) vindo de outra classe. :S

É que meu código é grande demais.

Mas sobre o que você disse, a classe MySQLPLRunner.java estava no pacote odinswlmanager, mas mudei para o pacote modelos, quanto a isto está ok. Importei com import modelo.MySQLPLRunner;

A classe onde estou tentando chamar a MySQLPLRunner esta no pacote odinswlmanager:

Resumão aqui:

public class LoginController implements Initializable {

// ---- muita coisa aqui...

@Override
    public void initialize(URL url, ResourceBundle rb) {
       txtfLogUser.requestFocus(); 

       conectar = new Conectar();
    
       MySQLPLRunner criarbd = new MySQLPLRunner();

}...

Agora só não sei como acertar esta instância.

O que tem na linha 52 da classe MySQLPLRunner?

O que tem na linha 22 da classe OdinSwLManager?

1 curtida

Então, estes erros tem que desconsiderar, pq eles ocorriam pq eu tinha clicado pra criar um construtor automático lá no MySQLPLRunner.

Na linha 52 estava o construtor vazio, que já excluí.

O erro que aparece se eu compilar agora é:

Updating property file: C:\Users\e001307\Documents\NetBeansProjects\OdinSWLM\build\built-jar.properties
Compiling 1 source file to C:\Users\e001307\Documents\NetBeansProjects\OdinSWLM\build\classes
C:\Users\e001307\Documents\NetBeansProjects\OdinSWLM\src\odinswlmanager\LoginController.java:346: error: constructor MySQLPLRunner in class MySQLPLRunner cannot be applied to given types;
       MySQLPLRunner criarbd = new MySQLPLRunner();
  required: Connection,boolean,boolean,boolean
  found: no arguments
  reason: actual and formal argument lists differ in length
1 error
C:\Users\e001307\Documents\NetBeansProjects\OdinSWLM\nbproject\build-impl.xml:924: The following error occurred while executing this line:
C:\Users\e001307\Documents\NetBeansProjects\OdinSWLM\nbproject\build-impl.xml:264: Compile failed; see the compiler error output for details.
FALHA NA CONSTRUÇÃO (tempo total: 0 segundos)

Porque não estou sabendo o que complementar no código da instância na classe odinswlmanager.LoginController.java onde marquei com —aqui—:

@Override
public void initialize(URL url, ResourceBundle rb) {
   txtfLogUser.requestFocus(); 
 
   conectar = new Conectar();

   MySQLPLRunner criarbd = new MySQLPLRunner(---aqui---);

    inserirAdmin = new InserirAdmin();
    
    try {
        inserirAdmin.VerificarAdmin();
    } catch (SQLException ex) {
        Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex);
    }
  
}

private Object getChildren() {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}

para lidar com o construtor original da classe MySQLPLRunner.java:

public MySQLPLRunner(Connection connection, boolean autoCommit,
            boolean stopOnError,boolean printDebug) {
        this.connection = connection;
        this.autoCommit = autoCommit;
        this.stopOnError = stopOnError;
        this.printDebug=printDebug;
    }

Preciso que funcione esta criação do BD invocando a classe dentro de outra para poder implementar no método que verifica se existe ou não, e caso não, criar antes de dar continuidade na aplicação. Lembrando que se eu for em “Executar Arquivo” no MySQLPLRunner.java, funciona perfeitamente.

O método que vai verificar está na odinswlmanager.LoginController.java:

public boolean verificarSeBDexiste() throws ClassNotFoundException, SQLException {
        List<String> list = new ArrayList<String>();
        Scanner input = new Scanner(System.in);
        String database = "odinswlmanager";
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql:/xxxxx:3306", "xxxxx", "xxxxx");
        Statement st = con.createStatement();
        DatabaseMetaData meta = con.getMetaData();
        ResultSet rs = meta.getCatalogs();
        while (rs.next()) {
            String listofDatabases = rs.getString("TABLE_CAT");
            list.add(listofDatabases);
        }
        if (list.contains(database)) {
            return true;
        } else {
            return false;
        }  
    }

Dependendo deste retorno, eu instanciaria o:

MySQLPLRunner criarbd = new MySQLPLRunner();

Acho que assim fica mais fácil para entenderem hehe.

@victor.guiraldelli para resolver esse seu problema aconselho utilizar um padrão de projeto chamado singleton, assim vc garantirá que apenas uma classe será responsável por estabelecer a conexão com banco de dados.
Sendo assim, seu projeto precisará de algumas modificações para deixar o código mais coeso e com baixo acoplamento.
Abaixo encontra-se um exemplo de como seria uma classe utilizando os conceitos desse padrão de projeto.

public class ConnectionManager {

private PGPoolingDataSource dataSource;

public Connection getConnection() throws Exception {
    Connection conn = dataSource.getConnection();
    conn.setAutoCommit(false);
    return conn;
}
//Inicio Singleton

private ConnectionManager() {
    dataSource = new PGPoolingDataSource();
    dataSource.setDataSourceName("teste");
    dataSource.setServerName("127.0.0.1");
    dataSource.setPortNumber(5432);
    dataSource.setDatabaseName("nomeBancoDados");
    dataSource.setUser("usuarioBancoDados");
    dataSource.setPassword("senhaUsuario");
    dataSource.setMaxConnections(30);
    dataSource.setInitialConnections(10);
}
private static ConnectionManager instance;

public static ConnectionManager getInstance() {
    if (instance == null) {
        instance = new ConnectionManager();
    }
    return instance;
}

Por fim, estou deixando um link para que possa entender melhor sobre Singleton.

1 curtida

Opa, eu tenho uma classe parecida, é que eu estava tentando fazer funcionar daquela forma primeiro para poder modificar para adequar ao padrão da conexão.

package modelo;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author e001307
 */
public class Conectar {

//  Modo Non-Static  
    private Connection connection;
    private String url = "jdbc:mysql://xxxxxxxx/odinswlmanager";
    private String usuario = "xxxxxx";
    private String senha = "xxxxx";
    
    public Connection getConnection()                { return this.connection; }
    public void setConnection(Connection connection) {  this.connection = connection;   }    
    
    public int conectarOdin() {
        try {   Class.forName("com.mysql.jdbc.Driver");
                connection = DriverManager.getConnection(url, usuario, senha);
                System.out.println("-   Connection to OdinSwlManager Server established.");
        return 1;                                                            
    } catch (ClassNotFoundException | SQLException ex) {
                    Logger.getLogger(Conectar.class.getName()).log(Level.SEVERE, null, ex); }
        return 0;   }
    
    public void conectarDB() {
        try {   Class.forName("com.mysql.jdbc.Driver");
                connection = DriverManager.getConnection(url, usuario, senha);
                System.out.println("-   Connection to MySql Server established.");
    } catch (ClassNotFoundException | SQLException ex) {
                    Logger.getLogger(Conectar.class.getName()).log(Level.SEVERE, null, ex); }}
    
    public void desconectarDB() {        
        try {   connection.close();
                System.out.println("-   Connection close.");
    } catch (SQLException ex) {
            Logger.getLogger(Conectar.class.getName()).log(Level.SEVERE, null, ex); }
    }
}

Os métodos desta classe estão conectando na tabela já criada na base de dados, e para verificar se a tabela já existe ou não, eu tenho que conectar apenas a base de dados sem a tabela, pois até onde entendi, aquele método lista todas as tabelas existentes e compara com a que estiver na variável.

Talvez eu possa colocar o método de verificação da base de dados dentro desta classe “Conectar.java”, mas acho que o problema continuaria o mesmo na hora de instanciar a classe que cria a tabela na base de dados. xD

Olha como foi implementado o método main da classe MySQLPLRunner, lá a classe é instanciada com os parâmetros que ela espera.

1 curtida

Então, da pra ver aqui: https://github.com/apache/ranger/blob/master/jisql/src/main/java/org/apache/util/sql/MySQLPLRunner.java

Única coisa que está diferente no meu são os parâmetros de conexão.

Só precisava saber se tinha como rodar esta classe via instância.

O construtor dela é:

public MySQLPLRunner(Connection connection, boolean autoCommit,
            boolean stopOnError,boolean printDebug) {
        this.connection = connection;
        this.autoCommit = autoCommit;
        this.stopOnError = stopOnError;
        this.printDebug=printDebug;
}

O Main:

public static void main(String args[]){
	// Creating object of ScriptRunner class
	  Connection con = null;
	  String driverName = "com.mysql.jdbc.Driver";
	  Properties props = null;
	  try {
          Class.forName(driverName).newInstance();
          props = new Properties();

          props.put("user", "xxxxxxxxxxxxxxxxxx");

          props.put("password", "xxxxxxxxxxxxxx");
          String connectString = "jdbc:mysql://xxxxxxxxxxxxxxx:3306";
          con = DriverManager.getConnection(connectString, props);


	MySQLPLRunner scriptRunner = new MySQLPLRunner(con, false, true,true);
 	//String aSQLScriptFilePath = "/disk1/zero/jisql-2.0.11/xa_core_db.sql";
    String aSQLScriptFilePath = "PLRUnner.sql";
	
	
	// Executing SQL Script
 	FileReader reader = new FileReader(aSQLScriptFilePath);
 	
 	try {
 		scriptRunner.runScript(reader);
 	}
 	finally {
 		if (reader != null) {
 			try {
 			reader.close();
 			}
 			catch(IOException ioe) {
 				// Ignore IOException when reader is getting closed
 			}
 		}
 	}

	
	  }
      catch (SQLException sqle) {
    	  sqle.printStackTrace();
      }
      catch (ClassNotFoundException cnfe) {
          System.err.println("Cannot find the driver class \"" + driverName + "\" in the current classpath.");
      }
      catch (InstantiationException ie) {
          System.err.println("Cannot instantiate the driver class \"" + driverName + "\"");
          ie.printStackTrace(System.err);
      }
      catch (IllegalAccessException iae) {
          System.err.println("Cannot instantiate the driver class \"" + driverName + "\" because of an IllegalAccessException");
          iae.printStackTrace(System.err);
      }catch (Exception sqle) {
    	  sqle.printStackTrace();
      }
      finally {
          if (con != null) {
              try {
            	  con.close();
              }
              catch (SQLException ignore) {
                  /* ignored */
              }
          }
      }
}

Por causa do construtor, na instância pede Connection,boolean,boolean.

Tentei fazer assim: MySQLPLRunner criarbd = new MySQLPLRunner(connection,true,true,true);

Mas só instanciar não é o suficiente, não executa o código todo como quando eu clico em MySQLPLRunner.java com botão direito e vou em executar arquivo.

Ai pensei em colocar:

MySQLPLRunner criarbd = new MySQLPLRunner(connection,true,true,true);
criarbd.runScript();

Mas aí no criarbd.runScript(); pede o parâmetro Reader:

public void runScript(Reader reader) throws IOException, SQLException {
        try {
            boolean originalAutoCommit = connection.getAutoCommit();
            try {
                if (originalAutoCommit != this.autoCommit) {
                    connection.setAutoCommit(this.autoCommit);
                }
                runScript(connection, reader);
            } finally {
                connection.setAutoCommit(originalAutoCommit);
            }
        } catch (IOException e) {
            throw e;
        } catch (SQLException e) {
            throw e;
        } catch (Exception e) {
            throw new RuntimeException("Error running script.  Cause: " + e, e);
        }
    }

Não sei o que colocar nesse parâmetro Reader, na verdade não sei nem se é possível realmente.

Claro que é possível, isso já é feito no método main da classe MySQLPLRunner.
Se você olhar o código que tem lá, ele conecta com o banco, cria uma instância da classe MySQLPLRunner chamado de scripRunner, ele passa como parâmetro para o construtor o objeto Connection, false, true e true.
Depois ele invoca o método runScript passando um objeto Reader que contém o script SQL a ser executado.

1 curtida

Isso significa que só instanciar deveria funcionar, sem rodar nenhum método da MySQLPLRunner?
Pq não está ocorrendo.

Tentei assim no LoginController.java que é onde preciso chamar a MySQLPLRunner:

@Override
public void initialize(URL url, ResourceBundle rb) {
   
   MySQLPLRunner criarbd = new MySQLPLRunner(connection,false,true,true);
   String aSQLScriptFilePath = "PLRUnner.sql";
   
   FileReader reader = null;

try {
 		criarbd.runScript(reader);
 	}
catch (IOException ex) {
    Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
    Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex);
    
}     	finally {
 		if (reader != null) {
 			try {
 			reader.close();
 			}
 			catch(IOException ioe) {
 				// Ignore IOException when reader is getting closed
 			}
 		}
}
 	
}

Deu erro:

Executing C:\Users\e001307\Documents\NetBeansProjects\OdinSWLM\dist\run175595151\OdinSWLM.jar using platform C:\Program Files\Java\jdk1.8.0_66\jre/bin/java
Exception in Application start method
java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
	at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
	at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182)
	at java.lang.Thread.run(Thread.java:745)
Caused by: javafx.fxml.LoadException: 
file:/C:/Users/e001307/Documents/NetBeansProjects/OdinSWLM/dist/run175595151/OdinSWLM.jar!/odinswlmanager/Login.fxml

	at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
	at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2579)
	at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
	at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214)
	at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
	at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
	at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
	at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
	at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
	at odinswlmanager.OdinSwLManager.start(OdinSwLManager.java:22)
	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
	at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
	at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
	at java.security.AccessController.doPrivileged(Native Method)
	at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
	at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
	... 1 more
Caused by: java.lang.RuntimeException: Error running script.  Cause: java.lang.NullPointerException
	at modelo.MySQLPLRunner.runScript(MySQLPLRunner.java:98)
	at odinswlmanager.LoginController.initialize(LoginController.java:351)
	at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
	... 17 more
Caused by: java.lang.NullPointerException
	at modelo.MySQLPLRunner.runScript(MySQLPLRunner.java:84)
	... 19 more
Exception running application odinswlmanager.OdinSwLManager
Java Result: 1

Acho que faltou você interpretar o que acontece no método main da classe MySQLPLRunner.

Vê se assim fica mais claro:

Class.forName("com.mysql.jdbc.Driver").newInstance();
Properties propriedades = new Properties();
propriedades.put("user", <aqui vai o nome do usuario>);
propriedades.put("password", <aqui vai a senha do usuario>);
String urlConexao = "jdbc:mysql://<aqui vai o endereço do banco>:<a aqui vai a porta>";
Connection conexao = DriverManager.getConnection(urlConexao, propriedades);
Reader scriptSql = <aqui tem que inicializar um Reader que forneça o script a ser executado>;

MySQLPLRunner scriptRunner = new MySQLPLRunner(conexao, false, true, true);
scriptRunner.runScript(scriptSql);
1 curtida

Agora sim funcionou hah :smiley: Muito obrigado.

Mas para eu entender melhor, vou questionar, desculpe o incômodo pela falta de conhecimento, estou num nível iniciante “curioso”. kkk

Eu não entendi o porque tenho que colocar todos os parâmetros de conexão aqui na classe LoginController.java novamente, se eles estão já na MySQLPLRunner.java? E também porque eu tenho que passar o reader denovo, se ele já está acertado na MySQLPLRunner.java também?

Ficou desta forma no LoginController.java:

@Override
    public void initialize(URL url, ResourceBundle rb) {
       txtfLogUser.requestFocus(); 

       Connection con = null;
    	  String driverName = "com.mysql.jdbc.Driver";
    	  Properties props = null;
          FileReader reader = null;
          
        try {
            Class.forName(driverName).newInstance();
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex);
        }
              props = new Properties();

              props.put("user", "Odin");

              props.put("password", "xxxxxxx");
              String connectString = "jdbc:mysql://xxxxxxxxx:3306";
              
        try {
            con = DriverManager.getConnection(connectString, props);
        } catch (SQLException ex) {
            Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex);
        }

        String aSQLScriptFilePath = "PLRUnner.sql";
        
        try {
            reader = new FileReader(aSQLScriptFilePath);
        } catch (FileNotFoundException ex) {
            Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex);
        }
              
    	MySQLPLRunner scriptRunner = new MySQLPLRunner(con, false, true,true);
     	//String aSQLScriptFilePath = "/disk1/zero/jisql-2.0.11/xa_core_db.sql";
        try {
            scriptRunner.runScript(reader);
            
            // Executing SQL Script
        } catch (IOException ex) {
            Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex);
        }
     	

     	
    }

É bem parecido com o que está na MySQLPRunner.java, achei que daria para aproveitar o de lá:

public static void main(String args[]){
    	// Creating object of ScriptRunner class
    	  Connection con = null;
    	  String driverName = "com.mysql.jdbc.Driver";
    	  Properties props = null;
    	  try {
              Class.forName(driverName).newInstance();
              props = new Properties();

              props.put("user", "Odin");

              props.put("password", "xxxxxxx");
              String connectString = "jdbc:mysql://xxxxxxx:3306";
              con = DriverManager.getConnection(connectString, props);


    	MySQLPLRunner scriptRunner = new MySQLPLRunner(con, false, true,true);
     	//String aSQLScriptFilePath = "/disk1/zero/jisql-2.0.11/xa_core_db.sql";
        String aSQLScriptFilePath = "PLRUnner.sql";
    	
    	
    	// Executing SQL Script
     	FileReader reader = new FileReader(aSQLScriptFilePath);
     	
     	try {
     		scriptRunner.runScript(reader);
     	}
     	finally {
     		if (reader != null) {
     			try {
     			reader.close();
     			}
     			catch(IOException ioe) {
     				// Ignore IOException when reader is getting closed
     			}
     		}
     	}

    	
    	  }
          catch (SQLException sqle) {
        	  sqle.printStackTrace();
          }
          catch (ClassNotFoundException cnfe) {
              System.err.println("Cannot find the driver class \"" + driverName + "\" in the current classpath.");
          }
          catch (InstantiationException ie) {
              System.err.println("Cannot instantiate the driver class \"" + driverName + "\"");
              ie.printStackTrace(System.err);
          }
          catch (IllegalAccessException iae) {
              System.err.println("Cannot instantiate the driver class \"" + driverName + "\" because of an IllegalAccessException");
              iae.printStackTrace(System.err);
          }catch (Exception sqle) {
        	  sqle.printStackTrace();
          }
          finally {
              if (con != null) {
                  try {
                	  con.close();
                  }
                  catch (SQLException ignore) {
                      /* ignored */
                  }
              }
          }
    }

Mas bom, tentei modificar um pouco pra ficar mais limpo, aprova?

Acrescentei na minha classe modelo.Conectar:

public void conectarDB2() {
        try {   Class.forName("com.mysql.jdbc.Driver");
                connection = DriverManager.getConnection(url2, usuario, senha);
                System.out.println("-   Connection to MySql Server established.");
    } catch (ClassNotFoundException | SQLException ex) {
                    Logger.getLogger(Conectar.class.getName()).log(Level.SEVERE, null, ex); }
    }

E então na LoginController.java:

@Override
    public void initialize(URL url, ResourceBundle rb) {
       txtfLogUser.requestFocus(); 
    
    conectar = new Conectar();

        conectar.conectarDB2();
        FileReader reader = null;            

        String aSQLScriptFilePath = "PLRUnner.sql";
        
        try {
            reader = new FileReader(aSQLScriptFilePath);
        } catch (FileNotFoundException ex) {
            Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex);
        }
              
    	MySQLPLRunner scriptRunner = new MySQLPLRunner(conectar.getConnection(), false, true,true);
     	
        try {
            scriptRunner.runScript(reader);
            
        } catch (IOException ex) {
            Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex);
        }
     	
    }

Funcionou, só não sei avaliar se está “BOM”. :S

Mas enfim, muito obrigado pela atenção aí até agora, ajudou demais. :smiley: