Я не могу считать файл только, когда имя базы данных содержит как (новая база данных (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 только. Возможно когда имя базы данных с вакуумом?
Вы знакомы с ошибкой 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\""}
Если установить значение 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="Data Source=.;Initial Catalog=Phoenix;Integrated Security=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
-121--1426002- Путь к файлу содержит пробелы, которые могут быть (одной из) проблем. Попробуйте вместо этого:
dumpCommand = "\"C:/Program Files/MySQL/MySQL Server 5.0/bin/mysqldump\" -h"
+hostName+user+databaseName;
и следуйте предложению phisch, чтобы напечатать dumpCommand
Последовательностей дважды проверить, что это допустимый вызов mysqldump
Я не уверен, что я понимаю ваш вопрос в полном объеме, но ваш dumpcommand, кажется, объединяет все переменные (имя хоста, пользователя, пользователя, база данных) в одну большую строку.
сделать систему .out.println (dumpcommand); И посмотрите, что это то, что вы действительно хотите выполнить.
Вы, вероятно, пропускаете здесь несколько пробелов.
Если сама «-» - это проблема, вы можете избежать этого, в противном случае MySQLLUMS подумает, что это параметр.
Это кажется синтаксисом MySQLDUMS немного по-другому. Ниже мой рабочий пример mysqldump -h mysserver -u root -p my_db -r> create_db.sql Я думаю, что вы должны использовать «» или `` `для сложных имен (не проверил себя).
Java и ОС надо знать, что такое команда и какие аргументы. Итак:
1) Вы можете попробовать использовать EXEC (String, String [])
, чтобы обеспечить CMD и args отдельным
2), вы можете включить команду mysqldump и каждый аргумент в Двойные цитаты для ОС узнают свои вещи.
Если вы используете программу (1) опцию MySQLDUMP, получат один аргумент по элементу в массиве, независимо от пробелов или чего-то.