Pregunta

No puedo leer un archivo sólo cuando el nombre de la base de datos contiene como (nueva base de datos (myid), etc. Doy un ejemplo de código siguiente:

dumpCommand = "C:/Program Files/MySQL/MySQL Server 5.0/bin/mysqldump -h"+hostName+user+databaseName;
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(dumpCommand);                     
InputStream in = proc.getInputStream();              
BufferedReader br=new BufferedReader(new InputStreamReader(in));
String line =null;

 while((line=br.readLine())!=null)
{
//able to read line only when database name like abc,datastore etc...
System.out.println(line);
    }

Supongamos que mi nombre de base de datos de medios mo cuando imprimo línea llegué nombre de la base como solamente DE. Es posible cuando nombre de la base con el espacio vacío?

¿Fue útil?

Solución

¿Está familiarizado con el insecto exec comillas dobles? (Por Runtime.exec o ProcessBuilder)

Puede probar:

Runtime.getRuntime().exec(new String[] {
  "\"C:/Program Files/MySQL/MySQL Server 5.0/bin/mysqldump\"", 
  "-h", 
  hostName+user+databaseName});

Sólo asegúrese de que ninguno de sus parámetros, tendrá que pase contiene comillas dobles (mientras que no que comienza con comillas dobles)
(Ver error 6511002 )

Cualquier parámetro como:

mykey="my value with space"

sería cambiado internamente (por la aplicación getRuntime()) en

"mykey="myvalue with space""

Si ese es el caso, se tendría que tokenize el argumento:

{"mykey=\"my\"" , "\"value with space\""}

Otros consejos

La ruta del archivo contiene espacios en blanco, que pueden ser (uno de) el problema (s). Tal vez puedas probar:

dumpCommand = "\"C:/Program Files/MySQL/MySQL Server 5.0/bin/mysqldump\" -h"
               +hostName+user+databaseName;

y suggstion seguimiento de phisch a imprimir la cadena dumpCommand para corroborar que se trata de una llamada de mysqldump válida

Java y la necesidad de saber qué sistema operativo es el comando y cuáles son los argumentos. Por lo tanto:

1) Se puede tratar de utilizar exec(String, String[]) para proporcionar el CMD y los argumentos por separado

2) Se puede encerrar el comando mysqldump y cada argumento entre comillas dobles para el sistema operativo para conocer sus cosas individuales.

Si se utiliza el programa mysqldump (1) opción recibirá un argumento por el elemento de la matriz, sin importar los espacios o lo que sea.

No estoy seguro si entiendo la pregunta en su totalidad, pero su dumpCommand parece a concat todas las variables (nombre de host, usuario, DataBaseName) a una cadena grande.

Hacer un System.out.println (dumpCommand); y ver si eso es lo que realmente desea ejecutar.

Usted es probablemente faltan algunos espacios aquí.

Si el "-" sí es un problema, es posible que desee escapar de ella, de lo contrario mysqldump pensará que es un parámetro.

Parece mysqldump sintaxis es un poco diferente de bits. A continuación se muestra mi ejemplo de trabajo mysqldump -h mysserver u root -p my_db -R> create_db.sql Creo que se debe utilizar "" o '' para los nombres complejos (no he comprobado yo mismo).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top