Rodar Script via Statement [RESOLVIDO]

4 respostas
pvinck

olá galera,

estou precisando rodar um script para limpar o banco de dados,
como ele contém várias linhas está dando erro ao executar com um
statement ex:

String sql = 
"update from clientes c set c.ativo='N';"+
"delete  from vendas;"+
"delete  from cta_receber;";
stm.execute(sql);

a primeira linha executa e dá erra de sintaxe na segunda linha, mas como pode-se ver está certo.
rodando direto no banco o script não dá problema, executa direitinho.

Espero que alguém já tenha passado por isso… Obrigado

4 Respostas

CristianPalmaSola10

nunca passei por isso, mas talvez se voce fazer dessa maneira funcione, veja so

stm.execute("update from clientes c set c.ativo='N';");
stm.execute("delete from vendas;");
stm.execute("delete from cta_receber;");

é um palpite creio que funcione ate mais e boa sorte…

victormagno

Vê se isso te ajuda:

pvinck

Galera, problema resolvido!

Encontrei um código para rodar script!

Estou divulgando aqui para caso alguém precisar.

o fonte se resume em carregar o script e rodar linha por linha no DB.

Obs: tive que editar o arquivo para que cada comando ficasse em uma linha, senão dava erro.
Como os comandos não eram muitos extensos não procurei um jeito de corrigir isso, mas se alguém
quiser pode complementar o código aqui depois.

public static void Limpa_Banco(){
				
		String s            = new String();  
		StringBuffer sb = new StringBuffer();  

		try
		{
			FileReader fr = new FileReader(new File("D:\\Exclui_Movimentos.sql"));
			
			BufferedReader br = new BufferedReader(fr);

			while((s = br.readLine()) != null)
			{
				sb.append(s);
			}
			br.close();
			
			String[] inst = sb.toString().split(";");

			Connection c = new Conexao().Conexao2("");
			Statement st = c.createStatement();

			for(int i = 0; i<inst.length; i++)
			{
				if(!inst[i].trim().equals(""))
				{
					st.executeUpdate(inst[i]);
					System.out.println(">>"+inst[i]);
				}
			}
			c.close();
		}catch(Exception e1){
			JOptionPane.showMessageDialog(null, "Erro: "+e1.getMessage(), "Alerta", JOptionPane.ERROR_MESSAGE); 
		}
	}

Referência: http://www.coderanch.com/t/306966/JDBC/databases/Execute-sql-file-java

pvinck

Valeu Victor e Cristian,

vi o que vocês postaram depois que encontrei a solução.

Cristian,
desse teu jeito funciona mas não tem como deixar dinâmico como rodar um script externo.

Victor,
essa que me indicou seria para select, bem legal a função,
mas no meu caso é para vários update e delete
dai não adianta resultset, e o statement não executa as multiplas linhas direto, mas valeu a atenção.

Abraço

Criado 28 de dezembro de 2012
Ultima resposta 28 de dez. de 2012
Respostas 4
Participantes 3