Runtime.getRuntime () .exec ()

Я не могу считать файл только, когда имя базы данных содержит как (новая база данных (myid) и т.д. Я даю следующий пример кода:

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

Предположим, что мое имя базы данных de mo означает, когда я печатаю строку, я получил имя базы данных как de только. Возможно когда имя базы данных с вакуумом?

8
задан hasanghaforian 17 July 2012 в 12:32
поделиться

5 ответов

Вы знакомы с ошибкой exec с двойными кавычками? (для Runtime. exec или ProcessBuilder)

Вы можете попробовать:

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

Просто убедитесь, что ни один из ваших параметров, которые вам нужно будет передать, не содержит двойных кавычек (в то время как не, начинающийся с двойных кавычек)
(смотрите ошибка 6511002)

Любой параметр, подобный этому:

mykey="my value with space"

будет изменен внутренне (реализацией getRuntime()) на

"mykey="myvalue with space""

Если это так, то необходимо лексеонизировать аргумент:

{"mykey=\"my\"" , "\"value with space\""}
15
ответ дан 5 December 2019 в 08:52
поделиться

Если установить значение SEED для ранда в целочисленное значение, изменяющееся ежедневно, это решит вашу проблему

$query = "SELECT * FROM table ORDER BY rand(" . date("Ymd") . ") LIMIT 1";

-121--4132667-

Я добавляю ту же проблему, пытаясь выполнить единичное тестирование DAL. Я обнаружил, что это работает:

<add name="SalesEntities" connectionString="metadata=res://*;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.;Initial Catalog=Phoenix;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" /> 
-121--1426002-

Путь к файлу содержит пробелы, которые могут быть (одной из) проблем. Попробуйте вместо этого:

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

и следуйте предложению phisch, чтобы напечатать dumpCommand Последовательностей дважды проверить, что это допустимый вызов mysqldump

2
ответ дан 5 December 2019 в 08:52
поделиться

Я не уверен, что я понимаю ваш вопрос в полном объеме, но ваш dumpcommand, кажется, объединяет все переменные (имя хоста, пользователя, пользователя, база данных) в одну большую строку.

сделать систему .out.println (dumpcommand); И посмотрите, что это то, что вы действительно хотите выполнить.

Вы, вероятно, пропускаете здесь несколько пробелов.

Если сама «-» - это проблема, вы можете избежать этого, в противном случае MySQLLUMS подумает, что это параметр.

0
ответ дан 5 December 2019 в 08:52
поделиться

Это кажется синтаксисом MySQLDUMS немного по-другому. Ниже мой рабочий пример mysqldump -h mysserver -u root -p my_db -r> create_db.sql Я думаю, что вы должны использовать «» или `` `для сложных имен (не проверил себя).

0
ответ дан 5 December 2019 в 08:52
поделиться

Java и ОС надо знать, что такое команда и какие аргументы. Итак:

1) Вы можете попробовать использовать EXEC (String, String []) , чтобы обеспечить CMD и args отдельным

2), вы можете включить команду mysqldump и каждый аргумент в Двойные цитаты для ОС узнают свои вещи.

Если вы используете программу (1) опцию MySQLDUMP, получат один аргумент по элементу в массиве, независимо от пробелов или чего-то.

2
ответ дан 5 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: