Java在Linux環境下執行MySQL命令無法獲取結果的問題
背景
最近專案中包含一些匯出功能,一些功能需要多表查詢才可以滿足需求,也有一些資料僅是單表查詢。在此之前想到過兩種方案,第一種是查詢出資料後通過EasyExcle寫入檔案,另一種是使用MySQL自帶的匯出功能。但在嘗試第二種方案時遇到一些問題,記錄如下。
問題
在執行單表匯出的過程中,我使用了MySQL自帶的命令完成。即在程式碼中通過字串拼接命令。例如:
即便是這條語句通過Java程式呼叫還是會執行失敗。失敗的原因有兩個:
- 通過Java程式碼呼叫命令會出現程式卡死,導致後面的程式無法執行,需要手動處理
- 命令是字串,需要告訴作業系統這並非字串而是命令
解決
import java.io.*;
/**
* @description:
* @author: 582895699@qq.com
* @time: 2020/11/26 下午 11:17
*/
public class Test {
public static void main(String[] args) {
executeCommand();
}
public static void executeCommand() {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("mysql -uroot -proot -D test -e 'select * from goods where id=1'");
stringBuilder.append(" > ");
stringBuilder.append("/tmp/20201128.csv");
// 告訴作業系統並非字串,而是命令
String[] command = {"/bin/bash", "-c", stringBuilder.toString()};
try {
Process process = Runtime.getRuntime().exec(command);
printMessage(process.getInputStream());
printMessage(process.getErrorStream());
// 等待命令執行完畢
process.waitFor();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
/**
* 另起一個執行緒輸出錯誤流
*
* @param input
*/
private static void printMessage(final InputStream input) {
new Thread(() -> {
Reader reader = new InputStreamReader(input);
BufferedReader bf = new BufferedReader(reader);
String line = null;
try {
while ((line = bf.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
}
如有問題,歡迎指正
原文地址:https://www.haicheng.website/passages/execute-command-on-linux/
相關文章
- 在Linux環境下執行DOS命令(轉)Linux
- 獲取多臺主機命令執行結果
- 獲取任務的執行結果
- LINUX學習(三)在Linux環境下執行DOS命令Linux
- Java獲取多執行緒執行結果方式的歸納與總結Java執行緒
- 解決在IE中獲取資料的快取問題,執行環境為node.js快取Node.js
- linux執行環境&命令Linux
- Windows下Pycharm執行命令列語句結果亂碼問題��Ȩ��Ӧ��WindowsPyCharm命令列
- Jmeter Arrivals thread group 在命令列執行時,無法生成測試結果JMeterthread命令列
- python執行shell並獲取結果Python
- 【Spark】 Spark作業執行原理--獲取執行結果Spark
- php中對MYSQL操作之批量執行,與獲取批量結果PHPMySql
- 簡單安裝PHP在Linux下的執行環境PHPLinux
- 在Linux中執行"rm -rf /"的結果Linux
- 在linux環境下安裝MysqlLinuxMySql
- Asp.Net在多執行緒環境下的狀態儲存問題ASP.NET執行緒
- linux環境中ab命令簡介及結果分析Linux
- 在Windows環境下使用NodeJS的fast-glob不正確執行的問題WindowsNodeJSAST
- victoriaMetrics無法獲取抓取target的問題
- 無法執行的update問題解析
- Linux使用time命令獲取命令執行時間Linux
- Mac環境下MySQL無法啟動的處理方法MacMySql
- 多執行緒的補充 獲取一定時間的執行結果執行緒
- Linux下無法執行Color pickerLinux
- Java指令重排序在多執行緒環境下的應對策略Java排序執行緒
- mysql的執行計劃快取問題MySql快取
- OSCache叢集環境下快取同步的問題快取
- mac下mysql無法啟動問題MacMySql
- 在 Ubuntu 環境下 Qt Creator 無法使用搜狗輸入法UbuntuQT
- 在Ubuntu環境下用gcc命令執行c程式以及Makefile編譯UbuntuGCC程式編譯
- linux搭建tomcat,mysql,jdk執行環境LinuxTomcatMySqlJDK
- 配置Linux+Nginx+PHP+MySQL執行環境LinuxNginxPHPMySql
- 解決SSH遠端執行命令找不到環境變數的問題變數
- 解決 Python 指令碼無法生成結果的問題Python指令碼
- Java執行環境配置Java
- Linux 環境下 PHP 專案基礎執行環境搭建(PHP 7.3.6 + MySQL 8.0.16 + Nginx)LinuxPHPMySqlNginx
- Linux環境的PHP執行LinuxPHP
- 解決:在阻止快取的inspect模式下無法drawImage()的問題快取模式