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