我是这个控制台问题的新手。我只是创建一个执行少量命令行的应用程序。我有一个命令
mysql -u root -p
用于打开MySQL控制台
在这里,我该如何输入密码?
我做了: -
cd c:\\Program Files (x86)\\MySQL\\MySQL Server 5.5\\bin
&& mysql -u root -p && root && create database testingdb;
&& quit && mysql –u root –p testingdb < mysql_dump.testingdb.sql
这里,第一个输入是root,它是password,第二个mysql_dump.testingdb.sql
是位于mysql_dump
包中的sql文件。
这不起作用,即使cmd控制台窗口关闭,也会打开一个线程。
java在这种情况下如何工作?
答案 0 :(得分:0)
您可以使用Runtime类来执行OS命令。由于我没有安装mysql安装canot检查提到的senario。使用cmd命令检查。
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("mysql -u root -p");
InputStream is = pr.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(is));
String inputLine;
while ((inputLine = in.readLine()) != null){
System.out.println(inputLine);
}
答案 1 :(得分:0)
ProcessBuilder提供了启动命令的完整API。
ProcessBuilder processBuilder = new ProcessBuilder("mysql", "-u", "root", "-p");
processBuilder.directory(new File("myDir"));
pb.redirectErrorStream(true);
Process proc = pb.start();
你可以将字符串写入BufferedWriter,它包含了容易引起混淆的&#34;输出&#34;来自processBuilder.start()
返回的Process对象的流OutputStream stdin = proc.getOutputStream();
OutputStreamWriter osr = new OutputStreamWriter(stdin);
BuffererWriter bw = new BuffererWriter(osr);
bw.write("Hello\n");
使用Process消耗标准输出/错误流时需要非常小心,否则进程可能会锁定。一个健壮的实现应该创建2个线程来异步读取stdout和stderr,并且可能是第3个来提供进程。
父进程使用这些流(#getInputStream(), getErrorStream())将输入提供给子进程并从子进程获取输出。因为某些本机平台仅提供有限的缓冲区 标准输入和输出流的大小,无法及时写入 输入流或读取子进程的输出流可能会导致 要阻止的子进程,甚至是死锁。
本指南When Runtime.exec() won't包含您需要的所有信息。