[Resolvido]Senha em branco no MySQL

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");

	}
}

Tenta utilizando, assim…


String senha = null; 

Acredito que funcione!

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

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.

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!

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

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

[code]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");
}

}
[/code]

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: