[Resolvido]Senha em branco no MySQL

7 respostas
C

Boa tarde, estou com um problema com o mysql. o código a seguir está funcionando perfeitamente quando a senha é preenchida, mas quando a senha está em branco, ele não funciona. Preciso deixar alguns bds com senhas em branco, e eu não gostaria de fazer um else para retirar o -p do codigo. Alguem pode me ajudar?
Seu eu rodar o -p e senha em branco no cmd, ele pede uma confirmação, mas no eclipse ele tranca.

package Migrador;

import java.io.IOException;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import com.mysql.jdbc.Connection;

public class Migrador
{

	public static void main(String[] args) throws ClassNotFoundException, SQLException, IOException, InterruptedException
	{

		String enderecobanco = "localhost";
		String banco = "nome_teste";
		String login = "root";
		String senha = "";

		// tem 2 tipos de endereco e login, pois foi feito para fazer backups de
		// bd online, tbm

		String loginlocal = "root";
		String senhalocal = "";
		String enderecolocal = "localhost";

		String bancoteste = banco + "_teste";

		System.out.println("INICIO DO BACKUP");

		Class.forName("com.mysql.jdbc.Connection");
		String url = "jdbc:mysql://" + enderecolocal + "/" + "?user=" + loginlocal + "&password=" + senhalocal;
		Connection conn = (Connection) DriverManager.getConnection(url);

		// aki ele pega o banco no loca, e salva onde eu quero
		Process proc = Runtime.getRuntime().exec("cmd /c mysqldump -u " + login + " -h " + enderecobanco + " " + banco + " --result-file=C:\\testebd\\" + bancoteste + ".sql" + " -p" + senha);
		proc.waitFor();

		// aki se existir o banco com o nome teste, no bd onde ele sera
		// colocado, ele deleta
		PreparedStatement stmt = conn.prepareStatement("DROP DATABASE IF EXISTS " + bancoteste + ";");
		stmt.execute();

		// aki, ele cria o banco com o nome teste
		stmt = conn.prepareStatement("CREATE DATABASE " + bancoteste + ";");
		stmt.execute();

		// aki ele importa o banco
		proc = Runtime.getRuntime().exec("cmd /c mysql -h " + enderecolocal + " -u " + loginlocal + " " + bancoteste + " < C:\\testebd\\" + bancoteste + ".sql" + " -p" + senhalocal);
		proc.waitFor();

		System.out.println("FIM DO BACKUP");

	}
}

7 Respostas

MeninodaVila

Tenta utilizando, assim…

String senha = null;

Acredito que funcione!

C

Fiz o que você falou, mas dai ele nem compila.
Alguma outra ideia?

drsmachado

Primeiro que não entendo qual a complexidade lógica e estrutural que viria acompanhada de um else…
Segundo, troque a String por StringBuffer, isso vai te auxiliar no momento de fazer a verificação de senha.
Terceiro, use um operador ternário.

C

Já foi resolvido, obrigado pela atenção!

drsmachado, eu faria um else para as execuções em cmd do mysql não usarem o “-p”, quando a senha fosse em branco, pois então ele não pediria confirmação de senha para logar!

mas resolvi com o seguinte codigo:

Adicionei isto antes do inicio do backup, foi a melhor maneira que achei até o momento. Obrigado!

drsmachado

A comunidade do guj agradece por compartilhar a informação

C

Adicionei algumas alterações, e o código está funcionando muito bem.
Ficou:

package Migrador;

import java.io.IOException;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import com.mysql.jdbc.Connection;

public class Migrador
{

	public String enderecobanco = "";
	String banco = "";
	String login = "";
	String senha = "";
	String logarsenha = "";

	String loginlocal = "";
	String senhalocal = "";
	String enderecolocal = "";
	String logarsenhalocal = "";

	public void executar() throws IOException, SQLException, InterruptedException, ClassNotFoundException
	{
		String bancoteste = banco + "_teste";

		if (!(senha.equals("")))
		{
			logarsenha = " -p" + senha;
		}

		if (!(senhalocal.equals("")))
		{
			logarsenhalocal = " -p" + senhalocal;
		}

		System.out.println("INICIO DO BACKUP");

		Class.forName("com.mysql.jdbc.Connection");
		String url = "jdbc:mysql://" + enderecolocal + "/" + "?user=" + loginlocal + "&password=" + senhalocal;
		Connection conn = (Connection) DriverManager.getConnection(url);

		Process proc = Runtime.getRuntime().exec("cmd /c mysqldump -u " + login + " -h " + enderecobanco + " " + banco + " --result-file=C:\\testebd\\" + bancoteste + ".sql" + logarsenha);
		proc.waitFor();

		PreparedStatement stmt = conn.prepareStatement("DROP DATABASE IF EXISTS " + bancoteste + ";");
		stmt.execute();

		stmt = conn.prepareStatement("CREATE DATABASE " + bancoteste + ";");
		stmt.execute();

		proc = Runtime.getRuntime().exec("cmd /c mysql -h " + enderecolocal + " -u " + loginlocal + " " + bancoteste + " < C:\\testebd\\" + bancoteste + ".sql" + logarsenhalocal);
		proc.waitFor();

		System.out.println("FIM DO BACKUP");
	}
}
ViniGodoy

Por favor, ao postar tópicos NÃO USE APENAS LETRAS MAIÚSCULAS NO TÍTULO.

Além disso, sempre que postar código, use também a tag code (e não a quote, como vc usou), como descrito aqui:

Criado 20 de dezembro de 2011
Ultima resposta 20 de dez. de 2011
Respostas 7
Participantes 4