linux 环境下 mysql 导出CSV格式报表

一般情况下不会特意到linux系统上去使用mysql, 毕竟没有类似MysqlFront这样现成的操作工具。但是产品的线上服务器是linux服务器,没办法,只能硬着头皮码shell语句来操作了。

首先要明确一点,拉sql的sql语句和在后台java内部调用sql语句的目标不同,所以设计方法也不同:拉sql注重开发sql语句效率,而运行效率不必过于在意,所以甚至可以一张表可以用几个sql语句来合成

通用语句如下:

 mysql -u biadmin -h lbw-52xfj.mysql.rds.aliyuncs.com -p -e "你需要的sql语句"  > 文件输出位置

-u 是mysql用户名, -h 是主机地址(如果是在本机上操作可以写 "localhost", 远程的话好像就只能写ip地址或者域名了), -e 不在mysql提示符环境下运行sql(当然你得每次输入密码!)

有几点是需要注意的:

1. " "内的sql语句不可以带"`",就是esc键与tab键之间的那个键,我试图把它加进去过,结果就是执行语句后程序一直suspend在那里, 如果sql语句字段里有特殊意义的字符比如 "sum",也只好换个命名方式了~~

2. sql语句中不可以存在回车键盘,否则系统会以回车键之前的语句作为 输入语句,这点非常坑爹,每次写好一个sql语句还要一行一行把它重新排列一次。目前没什么好的方法,我自己是用java把sql语句的 “ ” 替换成了空格~~,代码如下:

 1 package utils;
 2 import java.io.BufferedReader;
 3 import java.io.BufferedWriter;
 4 import java.io.File;
 5 import java.io.FileReader;
 6 import java.io.FileWriter;
 7 import java.io.Reader;
 8 import java.io.Writer;
 9 
10 public class SqlExport {
11     
12     /** 
13      * @Description 以" "拼接源文件各行并输出至目标文件
14      * @param srcAddr 源文件地址
15      * @param destAddr 目标文件地址
16      */
17     public void rmvEnter(String srcAddr, String destAddr) {
18         File srcFile = new File(srcAddr); 
19         File destFile = new File(destAddr);        
20 
21         FileReader sr = null;
22         FileWriter dw = null;
23         BufferedReader br = null;
24         BufferedWriter bw = null;
25         
26         try {
27             if (!srcFile.exists()) {
28                 srcFile.createNewFile();
29             }
30             if (!destFile.exists()) {
31                 destFile.createNewFile();
32             }
33             sr = new FileReader(srcFile);
34             dw = new FileWriter(destFile);
35             br = new BufferedReader(sr);
36             bw = new BufferedWriter(dw);
37             
38             String str = null;
39             /* 读一行,写一行 */
40             while((str = br.readLine()) != null) {
41                 str = " " + str;
42                 bw.write(str);                
43             }
44             bw.flush();
45         } catch (Exception e) {
46             e.printStackTrace();
47         } finally {
48             closeWriter(bw);
49             closeReader(br);
50             closeWriter(dw);
51             closeReader(sr);        
52         }
53         
54     }
55     
56     private void closeReader(Reader rd) {
57         if (null != rd) {
58             try {
59                 rd.close();
60             } catch(Exception e) {
61                 e.printStackTrace();
62             }
63         }
64     }
65     
66     private void closeWriter(Writer wr) {
67         if (null != wr) {
68             try {
69                 wr.close();
70             } catch(Exception e) {
71                 e.printStackTrace();
72             }
73         }
74     }
75     
76     
77     public static void main(String[] args) {
78         String srcAddr = "C:/Users/pc/Desktop/sql语句库/推荐人推广明细.sql";
79         String destAddr = "C:/Users/pc/Desktop/sql语句库/dest.sql";
80         
81         new SqlExport().rmvEnter(srcAddr, destAddr);
82         
83     }
84 
85 }
View Code

3. 其中"文件输出位置"可以是不存在的文件,该语句会自动为你创建并注入查询结果,目前只试过CSV文件,xls格式文件还没有试过, 如果想把输出的CSV文件转为xls的话,先使用excel的自文本功能格式化CSV文件,之后将文件另存为excel格式。

4. " "内的sql语句要在最开始加上database选择语句, 否则执行shell命令后会报错: no database selected!

原文地址:https://www.cnblogs.com/yxmfighting/p/7276912.html