• 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!

  • 相关阅读:
    JAVA基础--线程
    Flutter: SliverAppBar 应用程序栏与滚动视图集成,以便它可以根据滚动偏移量在高度上变化
    Flutter: MediaQuery
    Dart: puppeteer库
    Flutter: 监听App显示,隐藏
    Dart: 解析html字符串
    Dart: 编码和解码各种存档和压缩格式
    Dart: 执行shell命令
    运行Chrome浏览器如何添加Options
    Flutter 删除AppBar的返回icon
  • 原文地址:https://www.cnblogs.com/yxmfighting/p/7276912.html
Copyright © 2020-2023  润新知