<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>quhaichuan</title>
  
  <subtitle>学习笔记</subtitle>
  <link href="/atom.xml" rel="self"/>
  
  <link href="https://babachuan.github.io/"/>
  <updated>2020-03-15T02:41:41.492Z</updated>
  <id>https://babachuan.github.io/</id>
  
  <author>
    <name>屈海川</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>Mybatis</title>
    <link href="https://babachuan.github.io/2020/03/15/Mybatis/"/>
    <id>https://babachuan.github.io/2020/03/15/Mybatis/</id>
    <published>2020-03-15T02:35:38.000Z</published>
    <updated>2020-03-15T02:41:41.492Z</updated>
    
    <content type="html"><![CDATA[<div class="toc"><!-- toc --><ul><li><a href="#1-org-apache-ibatis-binding-bindingexception-invalid-bound-statement-bao-cuo-chu-li">1.org.apache.ibatis.binding.BindingException: Invalid bound statement报错处理</a></li></ul><!-- tocstop --></div><h1><span id="1-org-apache-ibatis-binding-bindingexception-invalid-bound-statement-bao-cuo-chu-li">1.org.apache.ibatis.binding.BindingException: Invalid bound statement报错处理</span><a href="#1-org-apache-ibatis-binding-bindingexception-invalid-bound-statement-bao-cuo-chu-li" class="header-anchor">#</a></h1><p>使用springboot集成mybatis，在接口和映射文件都写好后执行查询报错。</p><p><strong>接口文件</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">package com.qhc.springboot2.dao;</span><br><span class="line"></span><br><span class="line">import com.qhc.springboot2.beans.User;</span><br><span class="line"></span><br><span class="line">import java.util.List;</span><br><span class="line"></span><br><span class="line">public interface UserDao &#123;</span><br><span class="line">    User queryById(int id);</span><br><span class="line"></span><br><span class="line">    List&lt;User&gt; getAll();</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>mybatis映射文件UserMapping.xml</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">&lt;?xml version&#x3D;&quot;1.0&quot; encoding&#x3D;&quot;UTF-8&quot;?&gt;</span><br><span class="line">&lt;!DOCTYPE mapper PUBLIC &quot;-&#x2F;&#x2F;mybatis.org&#x2F;&#x2F;DTD Mapper 3.0&#x2F;&#x2F;EN&quot; &quot;http:&#x2F;&#x2F;mybatis.org&#x2F;dtd&#x2F;mybatis-3-mapper.dtd&quot;&gt;</span><br><span class="line"></span><br><span class="line">&lt;mapper namespace&#x3D;&quot;com.qhc.springboot2.dao&quot;&gt;</span><br><span class="line"></span><br><span class="line">    &lt;resultMap id&#x3D;&quot;BaseResultMap&quot; type&#x3D;&quot;com.qhc.springboot2.beans.User&quot;&gt;</span><br><span class="line">        &lt;result column&#x3D;&quot;id&quot; jdbcType&#x3D;&quot;INTEGER&quot; property&#x3D;&quot;id&quot; &#x2F;&gt;</span><br><span class="line">        &lt;result column&#x3D;&quot;userName&quot; jdbcType&#x3D;&quot;VARCHAR&quot; property&#x3D;&quot;userName&quot; &#x2F;&gt;</span><br><span class="line">        &lt;result column&#x3D;&quot;passWord&quot; jdbcType&#x3D;&quot;VARCHAR&quot; property&#x3D;&quot;passWord&quot; &#x2F;&gt;</span><br><span class="line">        &lt;result column&#x3D;&quot;realName&quot; jdbcType&#x3D;&quot;VARCHAR&quot; property&#x3D;&quot;realName&quot; &#x2F;&gt;</span><br><span class="line">    &lt;&#x2F;resultMap&gt;</span><br><span class="line"></span><br><span class="line">    &lt;select id&#x3D;&quot;queryById&quot; resultMap&#x3D;&quot;BaseResultMap&quot;&gt;</span><br><span class="line">        select * from user where id &#x3D; #&#123;id&#125;</span><br><span class="line">    &lt;&#x2F;select&gt;</span><br><span class="line"></span><br><span class="line">    &lt;select id&#x3D;&quot;getAll&quot; resultMap&#x3D;&quot;BaseResultMap&quot;&gt;</span><br><span class="line">        select * from user</span><br><span class="line">    &lt;&#x2F;select&gt;</span><br><span class="line"></span><br><span class="line">&lt;&#x2F;mapper&gt;</span><br></pre></td></tr></table></figure><p>注意：我上面写的namespace是<code>&lt;mapper namespace=&quot;com.qhc.springboot2.dao&quot;&gt;</code>这写法不能对应到指定的接口文件，就会报错：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)</span><br></pre></td></tr></table></figure><p><strong>修改方法</strong></p><p>将映射文件中namespace修改为<code>com.qhc.springboot2.dao.UserDao</code>问题即可解决。</p>]]></content>
    
    <summary type="html">
    
      MyBatis 是一款优秀的持久层框架，它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息，将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
    
    </summary>
    
    
    
      <category term="Mybatis" scheme="https://babachuan.github.io/tags/Mybatis/"/>
    
  </entry>
  
  <entry>
    <title>other</title>
    <link href="https://babachuan.github.io/2020/03/14/other/"/>
    <id>https://babachuan.github.io/2020/03/14/other/</id>
    <published>2020-03-14T03:48:55.000Z</published>
    <updated>2020-03-14T03:55:35.940Z</updated>
    
    <content type="html"><![CDATA[<p>[toc]</p><h1><span id="1-maven-ji-cheng-mybatis-ce-shi-shi-bao-cuo-chu-li">1.Maven集成Mybatis测试时报错处理</span><a href="#1-maven-ji-cheng-mybatis-ce-shi-shi-bao-cuo-chu-li" class="header-anchor">#</a></h1><p>在通过maven进行mybatis测试的时候,引入的Pom如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br></pre></td><td class="code"><pre><span class="line">&lt;?xml version&#x3D;&quot;1.0&quot; encoding&#x3D;&quot;UTF-8&quot;?&gt;</span><br><span class="line">&lt;project xmlns&#x3D;&quot;http:&#x2F;&#x2F;maven.apache.org&#x2F;POM&#x2F;4.0.0&quot;</span><br><span class="line">         xmlns:xsi&#x3D;&quot;http:&#x2F;&#x2F;www.w3.org&#x2F;2001&#x2F;XMLSchema-instance&quot;</span><br><span class="line">         xsi:schemaLocation&#x3D;&quot;http:&#x2F;&#x2F;maven.apache.org&#x2F;POM&#x2F;4.0.0 http:&#x2F;&#x2F;maven.apache.org&#x2F;xsd&#x2F;maven-4.0.0.xsd&quot;&gt;</span><br><span class="line">    &lt;modelVersion&gt;4.0.0&lt;&#x2F;modelVersion&gt;</span><br><span class="line"></span><br><span class="line">    &lt;groupId&gt;com.qhc&lt;&#x2F;groupId&gt;</span><br><span class="line">    &lt;artifactId&gt;spring-Mybatis&lt;&#x2F;artifactId&gt;</span><br><span class="line">    &lt;version&gt;1.0-SNAPSHOT&lt;&#x2F;version&gt;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">    &lt;properties&gt;</span><br><span class="line">        &lt;project.build.sourceEncoding&gt;UTF-8&lt;&#x2F;project.build.sourceEncoding&gt;</span><br><span class="line">        &lt;maven.compiler.source&gt;1.8&lt;&#x2F;maven.compiler.source&gt;</span><br><span class="line">        &lt;maven.compiler.target&gt;1.8&lt;&#x2F;maven.compiler.target&gt;</span><br><span class="line"></span><br><span class="line">        &lt;spring.version&gt;5.1.3.RELEASE&lt;&#x2F;spring.version&gt;</span><br><span class="line">    &lt;&#x2F;properties&gt;</span><br><span class="line"></span><br><span class="line">    &lt;dependencies&gt;</span><br><span class="line">        &lt;!-- https:&#x2F;&#x2F;mvnrepository.com&#x2F;artifact&#x2F;junit&#x2F;junit --&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;junit&lt;&#x2F;groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;junit&lt;&#x2F;artifactId&gt;</span><br><span class="line">            &lt;version&gt;4.12&lt;&#x2F;version&gt;</span><br><span class="line">            &lt;scope&gt;test&lt;&#x2F;scope&gt;</span><br><span class="line">        &lt;&#x2F;dependency&gt;</span><br><span class="line">        </span><br><span class="line">        &lt;!-- https:&#x2F;&#x2F;mvnrepository.com&#x2F;artifact&#x2F;org.mybatis&#x2F;mybatis --&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;org.mybatis&lt;&#x2F;groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;mybatis&lt;&#x2F;artifactId&gt;</span><br><span class="line">            &lt;version&gt;3.5.4&lt;&#x2F;version&gt;</span><br><span class="line">        &lt;&#x2F;dependency&gt;</span><br><span class="line">        &lt;!-- https:&#x2F;&#x2F;mvnrepository.com&#x2F;artifact&#x2F;mysql&#x2F;mysql-connector-java --&gt;</span><br><span class="line">        &lt;dependency&gt;</span><br><span class="line">            &lt;groupId&gt;mysql&lt;&#x2F;groupId&gt;</span><br><span class="line">            &lt;artifactId&gt;mysql-connector-java&lt;&#x2F;artifactId&gt;</span><br><span class="line">            &lt;version&gt;8.0.19&lt;&#x2F;version&gt;</span><br><span class="line">        &lt;&#x2F;dependency&gt;</span><br><span class="line">    &lt;&#x2F;dependencies&gt;</span><br><span class="line"></span><br><span class="line">&lt;&#x2F;project&gt;</span><br></pre></td></tr></table></figure><p>如上面所示，只引入了<code>mybatis</code>和<code>mysql驱动</code>，当时为了赶潮流，直接把mysql驱动用了最新版本，结果在测试过程中报错：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">Loading class &#96;com.mysql.jdbc.Driver&#39;. This is deprecated. The new driver class is &#96;com.mysql.cj.jdbc.Driver&#39;. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.</span><br><span class="line"></span><br><span class="line">org.apache.ibatis.exceptions.PersistenceException: </span><br><span class="line">### Error querying database.  Cause: java.sql.SQLException: The server time zone value &#39;�й���׼ʱ��&#39; is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the &#39;serverTimezone&#39; configuration property) to use a more specifc time zone value if you want to utilize time zone support.</span><br><span class="line">### The error may exist in UserMapper.xml</span><br><span class="line">### The error may involve com.qhc.mybatis.UserMapper.selectUser</span><br><span class="line">### The error occurred while executing a query</span><br><span class="line">### Cause: java.sql.SQLException: The server time zone value &#39;�й���׼ʱ��&#39; is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the &#39;serverTimezone&#39; configuration property) to use a more specifc time zone value if you want to utilize time zone support.</span><br></pre></td></tr></table></figure><p>折腾了半天，最后将mysql驱动的版本改为如下才解决问题：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">&lt;!-- https:&#x2F;&#x2F;mvnrepository.com&#x2F;artifact&#x2F;mysql&#x2F;mysql-connector-java --&gt;</span><br><span class="line">&lt;dependency&gt;</span><br><span class="line">    &lt;groupId&gt;mysql&lt;&#x2F;groupId&gt;</span><br><span class="line">    &lt;artifactId&gt;mysql-connector-java&lt;&#x2F;artifactId&gt;</span><br><span class="line">    &lt;version&gt;5.1.6&lt;&#x2F;version&gt;</span><br><span class="line">&lt;&#x2F;dependency&gt;</span><br></pre></td></tr></table></figure><p>看了不能一味的求新呀，适合的才是最好的。</p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;[toc]&lt;/p&gt;
&lt;h1&gt;&lt;span id=&quot;1-maven-ji-cheng-mybatis-ce-shi-shi-bao-cuo-chu-li&quot;&gt;1.Maven集成Mybatis测试时报错处理&lt;/span&gt;&lt;a href=&quot;#1-maven-ji-cheng-myba
      
    
    </summary>
    
    
    
      <category term="其他" scheme="https://babachuan.github.io/tags/%E5%85%B6%E4%BB%96/"/>
    
  </entry>
  
  <entry>
    <title>springboot</title>
    <link href="https://babachuan.github.io/2020/03/09/springboot/"/>
    <id>https://babachuan.github.io/2020/03/09/springboot/</id>
    <published>2020-03-09T10:47:50.000Z</published>
    <updated>2020-03-09T11:24:07.991Z</updated>
    
    <content type="html"><![CDATA[<div class="toc"><!-- toc --><ul><li><a href="#1-she-zhi-springboot-de-qi-dong-banner">1.设置springboot的启动banner</a></li><li><a href="#2-springboot-re-bu-shu-zhi-jrebel">2.SpringBoot热部署之-JRebel</a></li></ul><!-- tocstop --></div><h1><span id="1-she-zhi-springboot-de-qi-dong-banner">1.设置springboot的启动banner</span><a href="#1-she-zhi-springboot-de-qi-dong-banner" class="header-anchor">#</a></h1><p>step1:首先新建一个springboot项目</p><p>step2:在resources目录下新建banner.txt</p><p>然后将对应的banner写入到banner.txt即可，是不是如此简单，可以任意自定义banner,下面推荐两个常用的生成工具网址。</p><p><code>http://www.network-science.de/ascii/</code> 英文</p><p><code>https://www.degraeve.com/img2txt.php</code> 图片</p><h1><span id="2-springboot-re-bu-shu-zhi-jrebel">2.SpringBoot热部署之-JRebel</span><a href="#2-springboot-re-bu-shu-zhi-jrebel" class="header-anchor">#</a></h1><p> JRebel 是一款热部署插件。 写的过程中我们需要不断调试，如果没有热部署，则我们每修改一次项目要重启一次，验证问题有没有得到解决。如果项目很小，启动只要几秒或十几秒，可能感觉影响不是很大；但当项目变大了，重启一次需要几十秒，几分钟，甚至十几分钟，每次修改后都需要重启无疑会严重影响我们的工作效率。       正常情况下，我们使用IDEA（或Eclipse等IDE)+tomcat部署web项目时，如果只是修改web页面，按Ctrl+shift+F9（Eclipse按Ctrl+S即可)重新编译，无须重新启动，即可使修改的代码生效，这对我们的开发调试有了很大的帮助。但当我们在java文件中增加方法，增加变量，修改配置文件等大部分操作时，都需要重启服务器，而jrebel使绝大部分操作都不需要重启，只要重新编译即可将更新部署到服务器上，大大节省了我们工作花在重启服务器上的时间。</p><p><strong>安装</strong></p><p>File-&gt;Setting..-&gt;Plugins-&gt;输入JRebel-&gt;选择<code>JReble and XRebel for IntelliJ</code>安装，然后重启。（我的IDEA是2019.3版本）</p><p><strong>配置</strong></p><p>配置的方法其实很简单，JRebel自带了Setup Guide,按照说明过程操作即可，配置还是比较方便，Setup Guide如下图：（激活教程有很多，可自行网上百度）</p><p><img src="https://note.youdao.com/yws/public/resource/0a49b1f56516fdfb475347d978e25fb3/xmlnote/9D2585CFC66F45928E6EBE800BE514D8/14369" alt="配置过程"></p><blockquote><p><a href="https://blog.csdn.net/cms18374672699/article/details/87899869" target="_blank" rel="noopener">激活教程参考博客</a> </p><p><a href="https://my.oschina.net/u/3211737/blog/3098204" target="_blank" rel="noopener">激活教程参考博客2</a></p></blockquote>]]></content>
    
    <summary type="html">
    
      Spring Boot是由Pivotal团队提供的全新框架，其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置，从而使开发人员不再需要定义样板化的配置。通过这种方式，Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
    
    </summary>
    
    
    
      <category term="SpringBoot" scheme="https://babachuan.github.io/tags/SpringBoot/"/>
    
  </entry>
  
  <entry>
    <title>IDEA工具</title>
    <link href="https://babachuan.github.io/2020/03/04/IDEA%E5%B7%A5%E5%85%B7/"/>
    <id>https://babachuan.github.io/2020/03/04/IDEA%E5%B7%A5%E5%85%B7/</id>
    <published>2020-03-04T06:09:02.000Z</published>
    <updated>2020-03-11T03:38:12.729Z</updated>
    
    <content type="html"><![CDATA[<!-- toc--><h1><span id="1-idea-tian-jia-tomcat">1.IDEA添加tomcat</span><a href="#1-idea-tian-jia-tomcat" class="header-anchor">#</a></h1><p>虽然用IDEA编译查看Spring源码都没啥问题，但是第一次那个IEDA运行tomcat项目还真是无从下手。虽然之前用Eclipse比较熟练，但对新工具的使用也懵逼。这充分说明需要一份操作指南是多么重要。下面记录解决过程。</p><p><strong>第一步：IDEA添加Tomcat</strong></p><p>Run-&gt; Edit Configurations -&gt;Add -&gt;Tomcat Server -&gt; Local 来添加tomcat容器</p><p><img src="https://note.youdao.com/yws/public/resource/13ff7d046b0aa4afd087ac0c813282a0/xmlnote/E53065E1E203468F989EA94867CE2D06/14283" alt="添加Tomcat"></p><p><strong>第二步：配置Tomcat</strong></p><p>在上面步骤的基础上，也就是在Run/Debug Configurations页面DE Configure进行配置，包括：</p><ul><li>添加本地tomcat</li><li>配置本地的JDK</li></ul><p><img src="https://note.youdao.com/yws/public/resource/13ff7d046b0aa4afd087ac0c813282a0/xmlnote/B4DE9A756E764E3DA2013E6D10106889/14285" alt="添加本地Tomcat"></p><p><img src="https://note.youdao.com/yws/public/resource/13ff7d046b0aa4afd087ac0c813282a0/xmlnote/14F3FCE169384165A7EE2EE2E30D443F/14288" alt="配置tomcat"></p><p><strong>第三步：配置Artifact</strong></p><p>打开File-&gt;Project Structure-&gt;Project Settings -&gt;Artifacts -&gt;添加-&gt;Web Application:Exploded-&gt;From Modules.. -&gt;然后选中要添加的项目</p><p><img src="https://note.youdao.com/yws/public/resource/13ff7d046b0aa4afd087ac0c813282a0/xmlnote/F01DFC6752BA4E699AF97700F7B7DF3F/14281" alt="添加Artifacts"></p><p><strong>第四步：将项目添加到Tomcat</strong></p><p>Run-&gt; Edit Configurations-&gt;Deployment</p><p><img src="https://note.youdao.com/yws/public/resource/13ff7d046b0aa4afd087ac0c813282a0/xmlnote/0E8079C5DC3C4DF7A0FF910265A3BDCC/14291" alt="添加项目"></p><p><strong>第五步：运行Tomcat</strong></p><p>添加完之后IDEA的左下角会多一个Services页签，点击启动按钮启动即可，如下图</p><p><img src="https://note.youdao.com/yws/public/resource/13ff7d046b0aa4afd087ac0c813282a0/xmlnote/7382D16898EF44F3A9E84B530598390F/14294" alt="启动项目"></p><h1><span id="2-idea-ba-pu-tong-webapp-mu-lu-she-zhi-wei-web-mo-kuai">2.IDEA把普通webapp目录设置为web模块</span><a href="#2-idea-ba-pu-tong-webapp-mu-lu-she-zhi-wei-web-mo-kuai" class="header-anchor">#</a></h1><p>File-&gt;Project Structure -&gt;Project Settings -&gt;Modules -&gt;Add -&gt;web</p><p>然后将Path和Web Resource Directory选定为要设置的webapp目录，成功后对应的webapp目录会多一个蓝色圆点</p><p><img src="https://note.youdao.com/yws/public/resource/13ff7d046b0aa4afd087ac0c813282a0/xmlnote/E149E8DD01B64CFABD7CF31D216DEA28/14296" alt="设置WEB"></p><h1><span id="3-idea-she-zhi-jvm-yun-xing-can-shu">3.IDEA设置JVM运行参数</span><a href="#3-idea-she-zhi-jvm-yun-xing-can-shu" class="header-anchor">#</a></h1><p>对JVM运行参数进行修改是JVM性能调优的重要手段，下面介绍在应用程序开发过程中JVM参数设置的几种方式。</p><h2><span id="yun-xing-shi-zhi-ding">运行时指定</span><a href="#yun-xing-shi-zhi-ding" class="header-anchor">#</a></h2><p>java程序运行时指定 -Dproperty=value</p><p>该参数通常用于设置系统级全局变量值，如配置文件路径，保证该属性在程序中任何地方都可访问。当然，也可以通过在程序中使用System.setProperty进行设置。</p><p>​    注意：</p><p>​    1、如果-Dproperty=value的value中包含空格，可以将value使用引号引起来。例如：-Dmyname=”hello world”。</p><p>​    2、如果配置了-Dproperty=value参数，又在程序中使用了System.setProperty对同一个变量进行设置，那么以程序中的设置为准。</p><h2><span id="idea-she-zhi-jvm-can-shu">IDEA设置JVM参数</span><a href="#idea-she-zhi-jvm-can-shu" class="header-anchor">#</a></h2><p>在工具中的配置见下图：</p><p><img src="https://note.youdao.com/yws/public/resource/13ff7d046b0aa4afd087ac0c813282a0/xmlnote/5DADA7D646104AA5A512FD4C15F93DC4/14389" alt="配置jvm参数"></p><h2><span id="xiu-gai-pei-zhi-wen-jian">修改配置文件</span><a href="#xiu-gai-pei-zhi-wen-jian" class="header-anchor">#</a></h2><p> 1、打开IDEA安装目录中的bin目录；</p><p>  2、找到并打开idea.exe.vmoptions配置文件，编辑该配置文件保存；(或者idea64.exe.vmoptions)</p><p>  3、重新启动idea才能生效。</p><p>三种方式的优先级关系</p><p>　　方式一&gt;方式二&gt;方式三</p>]]></content>
    
    <summary type="html">
    
      以前经常使用Eclipse作为手头工具，自动在各种官方网站看到默认推荐的工具大部分都选择的IDEA，在使用过程中也确实发现了它的优秀。本文主要记录一些使用技巧及踩过的坑。
    
    </summary>
    
    
    
      <category term="IDEA" scheme="https://babachuan.github.io/tags/IDEA/"/>
    
  </entry>
  
  <entry>
    <title>Docker</title>
    <link href="https://babachuan.github.io/2020/02/25/Docker/"/>
    <id>https://babachuan.github.io/2020/02/25/Docker/</id>
    <published>2020-02-25T05:27:52.000Z</published>
    <updated>2020-02-25T10:30:35.272Z</updated>
    
    <content type="html"><![CDATA[<div class="toc"><!-- toc --><ul><li><a href="#1-yi-root-quan-xian-deng-lu-rong-qi">1. 以ROOT权限登录容器</a></li><li><a href="#2-an-zhuang-docker-compose">2. 安装docker-compose</a></li><li><a href="#4-cha-kan-docker-rong-qi-ri-zhi">4. 查看Docker容器日志</a><ul><li><a href="#4-1-docker-ri-zhi-fen-lei">4.1 Docker日志分类</a></li></ul></li><li><a href="#5-ti-xing-chu-li-warning-bridge-nf-call-iptables-is-disabled">5.提醒处理-WARNING: bridge-nf-call-iptables is disabled</a></li></ul><!-- tocstop --></div><h1><span id="1-yi-root-quan-xian-deng-lu-rong-qi">1. 以ROOT权限登录容器</span><a href="#1-yi-root-quan-xian-deng-lu-rong-qi" class="header-anchor">#</a></h1><p>在登录Docker容器的时候，我们一般使用如下命令：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[root@bogon Kiwi-8.0]# docker exec -it  c071060a0213 bash</span><br></pre></td></tr></table></figure><p>但是这登录后权限只有普通账户，如果不知道root密码无法进行root切换，其实在进入容器的时候就可以设置root权限，具体命令如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">第一步：查看容器的CONTAINER ID</span><br><span class="line"># docker ps</span><br><span class="line"></span><br><span class="line">第二步：获取root权限，进入Docker容器</span><br><span class="line">docker exec -ti -u root 4650e8d1bcca bash</span><br><span class="line">注意：这里的4650e8d1bcca是指容器的ID.</span><br></pre></td></tr></table></figure><blockquote><p><a href="https://www.cnblogs.com/jifeng/p/10277560.html" target="_blank" rel="noopener">参考博客</a></p></blockquote><h1><span id="2-an-zhuang-docker-compose">2. 安装docker-compose</span><a href="#2-an-zhuang-docker-compose" class="header-anchor">#</a></h1><p>在使用docker-compose命令的时候报错：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">-bash: docker-compose: command not found</span><br></pre></td></tr></table></figure><p>是因为没有安装docker-compose导致的。</p><p>安装命令：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"># curl -L https:&#x2F;&#x2F;get.daocloud.io&#x2F;docker&#x2F;compose&#x2F;releases&#x2F;download&#x2F;1.22.0&#x2F;docker-compose-&#96;uname -s&#96;-&#96;uname -m&#96; &gt; &#x2F;usr&#x2F;local&#x2F;bin&#x2F;docker-compose  &#x2F;&#x2F;下载安装</span><br><span class="line"></span><br><span class="line"># chmod +x &#x2F;usr&#x2F;local&#x2F;bin&#x2F;docker-compose  &#x2F;&#x2F;修改权限</span><br><span class="line"></span><br><span class="line"># docker-compose -version &#x2F;&#x2F;查看是否安装完成</span><br></pre></td></tr></table></figure><p>安装有多种方式，我安装的时候使用了这种方式，是可以使用的。</p><blockquote><p><a href="https://www.cnblogs.com/zuokun/p/11007063.html" target="_blank" rel="noopener">linux 安装 docker-compose</a></p></blockquote><h1><span id="4-cha-kan-docker-rong-qi-ri-zhi">4. 查看Docker容器日志</span><a href="#4-cha-kan-docker-rong-qi-ri-zhi" class="header-anchor">#</a></h1><h2><span id="4-1-docker-ri-zhi-fen-lei">4.1 Docker日志分类</span><a href="#4-1-docker-ri-zhi-fen-lei" class="header-anchor">#</a></h2><ul><li>Docker 引擎日志(也就是 dockerd 运行时的日志)</li><li>容器的日志，容器内的服务产生的日志</li></ul><p>在CentOS下查看Docker的引擎日志，查看引擎日志命令：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"># journalctl -u docker.service</span><br></pre></td></tr></table></figure><p>查看容器日志命令：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">[root@bogon containers]# docker logs --help</span><br><span class="line">Usage:  docker logs [OPTIONS] CONTAINER</span><br><span class="line">Fetch the logs of a container</span><br><span class="line">Options:</span><br><span class="line">      --details        Show extra details provided to logs显示更多的信息</span><br><span class="line">  -f, --follow         Follow log output实时刷新日志</span><br><span class="line">      --since string   Show logs since timestamp自某个时间后的日志，或相对时间，比如30m(即30分钟)</span><br><span class="line">      --tail string    Number of lines to show from the end of the logs (default &quot;all&quot;)(显示末尾固定行数，后面跟数字，默认是all)</span><br><span class="line">  -t, --timestamps     Show timestamps显示时间戳</span><br><span class="line">应用举例：</span><br><span class="line">#查看指定时间后的日志，只显示最后100行</span><br><span class="line">$ docker logs -f -t --since&#x3D;&quot;2020-02-25&quot; --tail&#x3D;100 CONTAINER_ID</span><br><span class="line"></span><br><span class="line">#查看最近30分钟的日志</span><br><span class="line">$ docker logs --since 30m CONTAINER_ID</span><br><span class="line"></span><br><span class="line">#查看某时间之后的日志</span><br><span class="line">$ docker logs -t --since&#x3D;&quot;2020-02-25T16:03:27&quot; CONTAINER_ID</span><br></pre></td></tr></table></figure><blockquote><p><a href="https://www.cnblogs.com/operationhome/p/10907591.html" target="_blank" rel="noopener">Docker容器日志管理最佳实践</a></p><p><a href="https://blog.lab99.org/post/docker-2016-07-14-faq.html" target="_blank" rel="noopener">Docker 问答录（100 问）</a></p><p><a href="http://open.daocloud.io/allen-tan-docker-xi-lie-zhi-docker-logs-shi-xian-pou-xi/" target="_blank" rel="noopener">「Allen谈Docker系列」之dockerlogs实现剖析</a></p><p><a href="https://segmentfault.com/a/1190000010086763" target="_blank" rel="noopener">从敲下docker logs开始理解docker日志原理</a></p></blockquote><h1><span id="5-ti-xing-chu-li-warning-bridge-nf-call-iptables-is-disabled">5.提醒处理-WARNING: bridge-nf-call-iptables is disabled</span><a href="#5-ti-xing-chu-li-warning-bridge-nf-call-iptables-is-disabled" class="header-anchor">#</a></h1><p>在运行docker info时，页面会弹出WARNING提醒，看着比较不舒服，解决办法如下。</p><p>编辑<code>/etc/sysctl.conf</code>文件:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">vi &#x2F;etc&#x2F;sysctl.conf</span><br></pre></td></tr></table></figure><p>在文件的末尾添加如下内容：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">net.bridge.bridge-nf-call-ip6tables &#x3D; 1</span><br><span class="line">net.bridge.bridge-nf-call-iptables &#x3D; 1</span><br></pre></td></tr></table></figure><p>保存文件，并退出，最后需要执行以下命令：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"># sysctl -p</span><br></pre></td></tr></table></figure><p>之后再使用docker info查看，不再有这个WARNING 提醒了。</p>]]></content>
    
    <summary type="html">
    
      Docker使用总结
    
    </summary>
    
    
    
      <category term="Docker" scheme="https://babachuan.github.io/tags/Docker/"/>
    
  </entry>
  
  <entry>
    <title>Linux</title>
    <link href="https://babachuan.github.io/2020/02/25/Linux/"/>
    <id>https://babachuan.github.io/2020/02/25/Linux/</id>
    <published>2020-02-25T05:19:43.000Z</published>
    <updated>2020-03-03T06:41:42.923Z</updated>
    
    <content type="html"><![CDATA[<div class="toc"><!-- toc --><ul><li><a href="#1-centos8-she-zhi-zhong-wen-zi-fu-ji">1. CentOS8设置中文字符集</a></li><li><a href="#2-cha-kan-linux-ban-ben">2. 查看Linux版本</a></li><li><a href="#3-grep-de-ji-ben-shi-yong">3. grep的基本使用</a><ul><li><a href="#3-1-huo-qu-pi-pei-mo-shi-de-shang-xia-zhi-ding-xing-shu">3.1 获取匹配模式的上下指定行数</a></li></ul></li></ul><!-- tocstop --></div><h1><span id="1-centos8-she-zhi-zhong-wen-zi-fu-ji">1. CentOS8设置中文字符集</span><a href="#1-centos8-she-zhi-zhong-wen-zi-fu-ji" class="header-anchor">#</a></h1><p>在使用Cent8的过程中，不能像设置Cent7的字符集那样进行下载。8的设置方式如下（亲自实践过）:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">dnf install glibc-langpack-zh.x86_64  #安装中文支持</span><br><span class="line">echo LANG&#x3D;zh_CN.UTF-8 &gt; &#x2F;etc&#x2F;locale.conf #修改系统的字符集</span><br><span class="line">source &#x2F;etc&#x2F;locale.conf #使立即生效</span><br></pre></td></tr></table></figure><blockquote><p><a href="http://blog.sina.com.cn/s/blog_6da6c1220102z5ds.html" target="_blank" rel="noopener">参考博客CentOS8中文支持</a></p></blockquote><h1><span id="2-cha-kan-linux-ban-ben">2. 查看Linux版本</span><a href="#2-cha-kan-linux-ban-ben" class="header-anchor">#</a></h1><p>对于RedHat版本的linux,可以使用如下命令：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"># cat &#x2F;etc&#x2F;redhat-release</span><br></pre></td></tr></table></figure><p>结果：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">[root@c071060a0213 &#x2F;]# cat &#x2F;etc&#x2F;redhat-release</span><br><span class="line">CentOS Linux release 8.1.1911 (Core)</span><br></pre></td></tr></table></figure><blockquote><p><a href="https://blog.csdn.net/szr4630/article/details/79613267" target="_blank" rel="noopener">参考博客</a></p></blockquote><h1><span id="3-grep-de-ji-ben-shi-yong">3. grep的基本使用</span><a href="#3-grep-de-ji-ben-shi-yong" class="header-anchor">#</a></h1><h2><span id="3-1-huo-qu-pi-pei-mo-shi-de-shang-xia-zhi-ding-xing-shu">3.1 获取匹配模式的上下指定行数</span><a href="#3-1-huo-qu-pi-pei-mo-shi-de-shang-xia-zhi-ding-xing-shu" class="header-anchor">#</a></h2><p>在平时工作中，有时候只想获取匹配模式的上面5行或下面5行，那么如何实现呢？首先看一下man手册。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"># man grep</span><br><span class="line">得到如下部分：</span><br><span class="line">   Context Line Control</span><br><span class="line">       -A NUM, --after-context&#x3D;NUM</span><br><span class="line">              Print NUM lines of trailing context after matching lines.  Places a line containing a group separator (described under --group-separator)</span><br><span class="line">              between contiguous groups of matches.  With the -o or --only-matching option, this has no effect and a warning is given.</span><br><span class="line"></span><br><span class="line">       -B NUM, --before-context&#x3D;NUM</span><br><span class="line">              Print NUM lines of leading context before matching lines.  Places a line containing a group separator (described under --group-separator)</span><br><span class="line">              between contiguous groups of matches.  With the -o or --only-matching option, this has no effect and a warning is given.</span><br><span class="line"></span><br><span class="line">       -C NUM, -NUM, --context&#x3D;NUM</span><br><span class="line">              Print NUM lines of output context.  Places a line containing a group separator (described  under  --group-separator)  between  contiguous</span><br><span class="line">              groups of matches.  With the -o or --only-matching option, this has no effect and a warning is given.</span><br></pre></td></tr></table></figure><p>举例：</p><p>有一个名为<code>testb</code>的文件内容如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line">aaaaaaaa</span><br><span class="line">dddddddd</span><br><span class="line">ffffffff</span><br><span class="line">gggggggg</span><br><span class="line">hhhhhhhh</span><br><span class="line">first&#x3D;before</span><br><span class="line">hello</span><br><span class="line">first&#x3D;after</span><br><span class="line">jjjjjjjj</span><br><span class="line">kkkkkkkk</span><br><span class="line">llllllll</span><br><span class="line">qqqqqqqq</span><br><span class="line">wwwwwwww</span><br><span class="line">eeeeeeee</span><br><span class="line">rrrrrrrr</span><br><span class="line">tttttttt</span><br><span class="line">yyyyyyyy</span><br><span class="line">uuuuuuuu</span><br><span class="line">iiiiiiii</span><br><span class="line">oooooooo</span><br><span class="line">pppppppp</span><br><span class="line">second&#x3D;before</span><br><span class="line">hello</span><br><span class="line">second&#x3D;after</span><br><span class="line">zzzzzzzz</span><br><span class="line">xxxxxxxx</span><br><span class="line">cccccccc</span><br><span class="line">vvvvvvvv</span><br><span class="line">bbbbbbbb</span><br><span class="line">nnnnnnnn</span><br><span class="line">mmmmmmmm</span><br></pre></td></tr></table></figure><p>我们想要获取hello前后各一行的数据</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">[geneplus@bogon software]$ less testb | grep -1 &#39;hello&#39;</span><br><span class="line">first&#x3D;before</span><br><span class="line">hello</span><br><span class="line">first&#x3D;after</span><br><span class="line">--</span><br><span class="line">second&#x3D;before</span><br><span class="line">hello</span><br><span class="line">second&#x3D;after</span><br></pre></td></tr></table></figure><p>其他试用方式如下：</p><ul><li><p>grep -5 ‘parttern’ inputfile =打印匹配行的前后5行</p></li><li><p>grep -C 5 ‘parttern’ inputfile =打印匹配行的前后5行</p></li><li><p>grep -A 5 ‘parttern’ inputfile =打印匹配行的后5行</p></li><li><p>grep -B 5 ‘parttern’ inputfile =打印匹配行的前5行</p></li></ul><blockquote><p><a href="https://www.cnblogs.com/wangkongming/p/3684905.html" target="_blank" rel="noopener">参考博客</a></p></blockquote>]]></content>
    
    <summary type="html">
    
      Linux操作系统使用总结
    
    </summary>
    
    
    
      <category term="Linux" scheme="https://babachuan.github.io/tags/Linux/"/>
    
  </entry>
  
  <entry>
    <title>Spring</title>
    <link href="https://babachuan.github.io/2020/02/22/spring/"/>
    <id>https://babachuan.github.io/2020/02/22/spring/</id>
    <published>2020-02-22T04:51:25.000Z</published>
    <updated>2020-02-22T12:57:50.921Z</updated>
    
    <content type="html"><![CDATA[<div class="toc"><!-- toc --><ul><li><a href="#1-shi-yong-junit-zuo-dan-yuan-ce-shi-jia-zai-spring-de-xml-pei-zhi-wen-jian">1.使用JUnit做单元测试加载Spring的XML配置文件</a><ul><li><a href="#1-1-wen-ti-jian-jie">1.1 问题简介</a></li><li><a href="#1-2-zheng-que-yin-ru-fang-shi">1.2 正确引入方式</a></li></ul></li></ul><!-- tocstop --></div><h1><span id="1-shi-yong-junit-zuo-dan-yuan-ce-shi-jia-zai-spring-de-xml-pei-zhi-wen-jian">1.使用JUnit做单元测试加载Spring的XML配置文件</span><a href="#1-shi-yong-junit-zuo-dan-yuan-ce-shi-jia-zai-spring-de-xml-pei-zhi-wen-jian" class="header-anchor">#</a></h1><h2><span id="1-1-wen-ti-jian-jie">1.1 问题简介</span><a href="#1-1-wen-ti-jian-jie" class="header-anchor">#</a></h2><p>在学习Spring的XML配置过程中，希望能够在单元测试时直接引入XML文件，但是如下的单元测试代码报错：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">java.io.FileNotFoundException: class path resource [spring-context.xml] cannot be opened because it does not exist</span><br></pre></td></tr></table></figure><p>对应的项目目录结构如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">[2020-02-22 20:48.27]  &#x2F;drives&#x2F;i&#x2F;个人&#x2F;博客管理&#x2F;Github&#x2F;Spring&#x2F;spring&#x2F;spring-XMLcomponent&#x2F;src</span><br><span class="line">[qhc.DESKTOP-IDDQ7KK] ➤ tree</span><br><span class="line">.</span><br><span class="line">+--- main</span><br><span class="line">|   +--- java</span><br><span class="line">|   |   +--- com</span><br><span class="line">|   |   |   +--- qhc</span><br><span class="line">|   |   |   |   +--- xml</span><br><span class="line">|   |   |   |   |   +--- Disc.java</span><br><span class="line">|   |   |   |   |   +--- DiscDriver.java</span><br><span class="line">|   +--- resources</span><br><span class="line">|   |   +--- spring-context.xml</span><br><span class="line">+--- test</span><br><span class="line">|   +--- java</span><br><span class="line">|   |   +--- XMLTest.java</span><br></pre></td></tr></table></figure><p>XMLTest.java文件内容如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">import com.qhc.xml.DiscDriver;</span><br><span class="line">import org.junit.Test;</span><br><span class="line">import org.junit.runner.RunWith;</span><br><span class="line">import org.springframework.beans.factory.annotation.Autowired;</span><br><span class="line">import org.springframework.test.context.ContextConfiguration;</span><br><span class="line">import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;</span><br><span class="line"></span><br><span class="line">@RunWith(SpringJUnit4ClassRunner.class)</span><br><span class="line">@ContextConfiguration(&quot;spring-context.xml&quot;) &#x2F;&#x2F;本意是想直接饮用resources目录下的spring-context.xml文件</span><br><span class="line">public class XMLTest &#123;</span><br><span class="line">    @Autowired</span><br><span class="line">    private DiscDriver discDriver;</span><br><span class="line"></span><br><span class="line">    @Test</span><br><span class="line">    public void xmlTest()&#123;</span><br><span class="line">        discDriver.paly();</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>但是执行上面的测试代码后提示：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">... 24 more</span><br><span class="line">Caused by: java.io.FileNotFoundException: class path resource [spring-context.xml] cannot be opened because it does not exist</span><br><span class="line">at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:180)</span><br><span class="line">at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:330)</span><br><span class="line">... 36 more</span><br></pre></td></tr></table></figure><p>这就很令我迷惑，还跟着网上的帖子设置了IntelliJ IDEA 之 mark directory as（），都试过了也没起作用，也是自己不断的尝试，终于被我发现了正确的引入xml的方式。</p><h2><span id="1-2-zheng-que-yin-ru-fang-shi">1.2 正确引入方式</span><a href="#1-2-zheng-que-yin-ru-fang-shi" class="header-anchor">#</a></h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">import com.qhc.xml.DiscDriver;</span><br><span class="line">import org.junit.Test;</span><br><span class="line">import org.junit.runner.RunWith;</span><br><span class="line">import org.springframework.beans.factory.annotation.Autowired;</span><br><span class="line">import org.springframework.test.context.ContextConfiguration;</span><br><span class="line">import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;</span><br><span class="line"></span><br><span class="line">@RunWith(SpringJUnit4ClassRunner.class)</span><br><span class="line">&#x2F;&#x2F;方式一：</span><br><span class="line">&#x2F;&#x2F;@ContextConfiguration(locations&#x3D;&quot;classpath:spring-context.xml&quot;) 这里这两种写法都是可以的</span><br><span class="line"></span><br><span class="line">&#x2F;&#x2F;方式二：</span><br><span class="line">@ContextConfiguration(&quot;&#x2F;spring-context.xml&quot;)</span><br><span class="line">public class XMLTest &#123;</span><br><span class="line">    @Autowired</span><br><span class="line">    private DiscDriver discDriver;</span><br><span class="line"></span><br><span class="line">    @Test</span><br><span class="line">    public void xmlTest()&#123;</span><br><span class="line">        discDriver.paly();</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>上面的两种方式都是可以的。</p><ul><li>方式一：@ContextConfiguration(locations=”classpath:spring-context.xml”) </li><li>方式二：@ContextConfiguration(“/spring-context.xml”)</li></ul><p>以下这是我遇到的错误方式</p><ul><li>错误方式一：@ContextConfiguration(“spring-context.xml”) 我怀疑告诉spring的路径中识别不到这个文件，具体我还不知道怎么取论证。</li></ul>]]></content>
    
    <summary type="html">
    
      在学习Spring的过程中遇到的一些问题，将其整理下来，在后面的的学习中少采坑。里面的都是一些零散的问题。
    
    </summary>
    
    
    
      <category term="Spring" scheme="https://babachuan.github.io/tags/Spring/"/>
    
  </entry>
  
  <entry>
    <title>mysql</title>
    <link href="https://babachuan.github.io/2020/02/18/mysql/"/>
    <id>https://babachuan.github.io/2020/02/18/mysql/</id>
    <published>2020-02-18T04:49:01.000Z</published>
    <updated>2020-03-30T02:39:27.601Z</updated>
    
    <content type="html"><![CDATA[<div class="toc"><!-- toc --><ul><li><a href="#1-case-when-yong-fa">1.case..when用法</a><ul><li><a href="#1-1-shi-yong-ge-shi">1.1 使用格式</a></li><li><a href="#1-2-shi-yong-shi-li">1.2 使用实例</a><ul><li><a href="#1-2-1-gen-ju-cha-xun-jie-guo-zhi-chong-xin-ding-yi-zhi">1.2.1 根据查询结果值重新定义值</a></li><li><a href="#1-2-2-gen-ju-cha-xun-jie-guo-jin-xing-pan-duan-sou-suo">1.2.2 根据查询结果进行判断（搜索）</a></li><li><a href="#1-2-3-gao-ji-yong-fa-fen-zu-tong-ji">1.2.3 高级用法-分组统计</a></li><li><a href="#1-2-4-gao-ji-yong-fa-pi-liang-geng-xin">1.2.4 高级用法-批量更新</a></li><li><a href="#1-2-4-fu-he-tiao-jian-shi-yong">1.2.4 复合条件使用</a></li></ul></li></ul></li><li><a href="#2-mysql-zhong-de-ifnull-nullif-he-isnull-yong-fa-xiang-jie">2.MySql中的IFNULL、NULLIF和ISNULL用法详解</a><ul><li><a href="#2-1-isnull-yong-fa">2.1 isnull用法</a></li><li><a href="#2-2-ifnull-yong-fa">2.2 ifnull用法</a></li><li><a href="#2-3-nullif-yong-fa">2.3 nullif用法</a></li></ul></li><li><a href="#3-lian-jie-cha-xun">3.连结查询</a><ul><li><a href="#3-1-left-join-zuo-lian-jie-cha-xun">3.1 LEFT JOIN 左连结查询</a><ul><li><a href="#3-1-1-ji-ben-shi-yong-shi-li">3.1.1 基本使用示例</a></li><li><a href="#3-1-2-duo-biao-lian-jie-cha-xun">3.1.2 多表连结查询</a></li></ul></li><li><a href="#3-2-right-join-you-lian-jie-cha-xun">3.2 RIGHT JOIN 右连结查询</a><ul><li><a href="#3-2-1-ji-ben-shi-yong-shi-li">3.2.1 基本使用示例</a></li></ul></li></ul></li><li><a href="#4-mysqldump-dao-chu-shu-ju-ku-bao-cuo-does-not-exist-when-using-lock-tables">4.mysqldump 导出数据库报错“does not exist when using LOCK TABLES”</a></li><li><a href="#5-cuo-wu-jie-jue-ben-di-ji-suan-ji-shang-de-mysql-fu-wu-qi-dong-ting-zhi-hou-mou-xie-fu-wu-zai-wei-you-qi-ta-fu-wu-huo-cheng-xu-shi-yong-shi-jiang-zi-dong-ting-zhi">5.【错误解决】本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止</a></li></ul><!-- tocstop --></div><p>[toc]</p><h1><span id="1-case-when-yong-fa">1.case..when用法</span><a href="#1-case-when-yong-fa" class="header-anchor">#</a></h1><h2><span id="1-1-shi-yong-ge-shi">1.1 使用格式</span><a href="#1-1-shi-yong-ge-shi" class="header-anchor">#</a></h2><ul><li>简单函数<br>CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END</li><li>搜索函数<br>CASE WHEN [expr] THEN [result1]…ELSE [default] END</li></ul><h2><span id="1-2-shi-yong-shi-li">1.2 使用实例</span><a href="#1-2-shi-yong-shi-li" class="header-anchor">#</a></h2><p><strong>预制数据</strong>-创建表</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">mysql&gt; create table person(</span><br><span class="line">    -&gt; id int(5) primary key,</span><br><span class="line">    -&gt; country varchar(20),</span><br><span class="line">    -&gt; name varchar(20),</span><br><span class="line">    -&gt; age int(3),</span><br><span class="line">    -&gt; gender varchar(2));</span><br><span class="line">Query OK, 0 rows affected (0.08 sec)</span><br></pre></td></tr></table></figure><p><strong>预制数据</strong>-插入数据</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">INSERT INTO person(id, country, name, age, gender) VALUES(3,&#39;china&#39;,&#39;tom&#39;,12,&#39;1&#39;);</span><br><span class="line">INSERT INTO person(id, country, name, age, gender) VALUES(7,&#39;usa&#39;,&#39;kobe&#39;,10,&#39;1&#39;);</span><br><span class="line">INSERT INTO person(id, country, name, age, gender) VALUES(8,&#39;usa&#39;,&#39;james&#39;,20,&#39;1&#39;);</span><br><span class="line">INSERT INTO person(id, country, name, age, gender) VALUES(9,&#39;usa&#39;,&#39;grace&#39;,30,&#39;0&#39;);</span><br><span class="line">INSERT INTO person(id, country, name, age, gender) VALUES(10,&#39;japan&#39;,&#39;monica&#39;,40,&#39;2&#39;);</span><br></pre></td></tr></table></figure><p><strong>预制数据</strong>-完成表数据</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">mysql&gt; select * from person;</span><br><span class="line">+----+---------+--------+------+--------+</span><br><span class="line">| id | country | name   | age  | gender |</span><br><span class="line">+----+---------+--------+------+--------+</span><br><span class="line">|  3 | china   | tom    |   12 | 1      |</span><br><span class="line">|  7 | usa     | kobe   |   10 | 1      |</span><br><span class="line">|  8 | usa     | james  |   20 | 1      |</span><br><span class="line">|  9 | usa     | grace  |   30 | 0      |</span><br><span class="line">| 10 | japan   | monica |   40 | 2      |</span><br><span class="line">+----+---------+--------+------+--------+</span><br><span class="line">5 rows in set (0.00 sec)</span><br></pre></td></tr></table></figure><h3><span id="1-2-1-gen-ju-cha-xun-jie-guo-zhi-chong-xin-ding-yi-zhi">1.2.1 根据查询结果值重新定义值</span><a href="#1-2-1-gen-ju-cha-xun-jie-guo-zhi-chong-xin-ding-yi-zhi" class="header-anchor">#</a></h3><p>从上面的表中，我们看到性别这一列其实可读性并不强，有时候为了数据库范式，会出现这种可读性不强的数据，那么我们在查询的时候可以使用CASE..WHEN重新使查询结果强可读。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">mysql&gt; SELECT id,&#96;name&#96;,CASE gender WHEN 1 THEN &#39;男&#39; WHEN 0 THEN &#39;女&#39; ELSE &#39;其他&#39; END AS &#39;性别&#39; FRO</span><br><span class="line">M person;</span><br><span class="line">+----+--------+--------+</span><br><span class="line">| id | name   | 性别   |</span><br><span class="line">+----+--------+--------+</span><br><span class="line">|  3 | tom    | 男     |</span><br><span class="line">|  7 | kobe   | 男     |</span><br><span class="line">|  8 | james  | 男     |</span><br><span class="line">|  9 | grace  | 女     |</span><br><span class="line">| 10 | monica | 其他   |</span><br><span class="line">+----+--------+--------+</span><br><span class="line">5 rows in set (0.00 sec)</span><br></pre></td></tr></table></figure><h3><span id="1-2-2-gen-ju-cha-xun-jie-guo-jin-xing-pan-duan-sou-suo">1.2.2 根据查询结果进行判断（搜索）</span><a href="#1-2-2-gen-ju-cha-xun-jie-guo-jin-xing-pan-duan-sou-suo" class="header-anchor">#</a></h3><p>有时候我们需要在查询结果中对值进行简单逻辑处理，比如<br>小于18岁我们称少年<br>19-35称为青年<br>大于36称中年</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">mysql&gt; SELECT id,&#96;name&#96;,CASE WHEN age&lt;18 THEN &#39;少年&#39;</span><br><span class="line">    -&gt; WHEN age&lt;&#x3D;35 THEN &#39;青年&#39;</span><br><span class="line">    -&gt; WHEN age&gt;36 THEN &#39;中年&#39;</span><br><span class="line">    -&gt; END &#39;状态&#39;</span><br><span class="line">    -&gt; FROM person;</span><br><span class="line">+----+--------+--------+</span><br><span class="line">| id | name   | 状态   |</span><br><span class="line">+----+--------+--------+</span><br><span class="line">|  3 | tom    | 少年   |</span><br><span class="line">|  7 | kobe   | 少年   |</span><br><span class="line">|  8 | james  | 青年   |</span><br><span class="line">|  9 | grace  | 青年   |</span><br><span class="line">| 10 | monica | 中年   |</span><br><span class="line">+----+--------+--------+</span><br><span class="line">5 rows in set (0.00 sec)</span><br></pre></td></tr></table></figure><p><strong>总结</strong>：从上面的SQL可以看出，我们根据年龄列的值，凭空判断出了一列“状态”，这就是使用CASE进行判断(搜索)的例子<br><strong>注意</strong>：搜索函数可以写判断，并且搜索函数只会返回<strong>第一个</strong>符合条件的值，其他case被忽略</p><h3><span id="1-2-3-gao-ji-yong-fa-fen-zu-tong-ji">1.2.3 高级用法-分组统计</span><a href="#1-2-3-gao-ji-yong-fa-fen-zu-tong-ji" class="header-anchor">#</a></h3><p>在上面的person表中，我们要分别统计出每个国家的性别人数。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">mysql&gt; SELECT country,</span><br><span class="line">    -&gt; SUM(CASE WHEN gender&#x3D;1 THEN 1 ELSE 0 END) AS &#39;男&#39;,</span><br><span class="line">    -&gt; SUM(CASE WHEN gender&#x3D;0 THEN 1 ELSE 0 END) AS &#39;女&#39;,</span><br><span class="line">    -&gt; SUM(CASE WHEN gender&gt;1 THEN 1 ELSE 0 END) AS &#39;未知&#39;</span><br><span class="line">    -&gt; FROM person</span><br><span class="line">    -&gt; GROUP BY country;</span><br><span class="line">+---------+------+------+--------+</span><br><span class="line">| country | 男   | 女   | 未知   |</span><br><span class="line">+---------+------+------+--------+</span><br><span class="line">| china   |    1 |    0 |      0 |</span><br><span class="line">| japan   |    0 |    0 |      1 |</span><br><span class="line">| usa     |    2 |    1 |      0 |</span><br><span class="line">+---------+------+------+--------+</span><br><span class="line">3 rows in set (0.01 sec)</span><br></pre></td></tr></table></figure><h3><span id="1-2-4-gao-ji-yong-fa-pi-liang-geng-xin">1.2.4 高级用法-批量更新</span><a href="#1-2-4-gao-ji-yong-fa-pi-liang-geng-xin" class="header-anchor">#</a></h3><p>由于person表中的性别可读性不强，我们批量把性别字段更新成汉字</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">mysql&gt; UPDATE person SET gender&#x3D;CASE gender</span><br><span class="line">    -&gt; WHEN 1 THEN &#39;男&#39;</span><br><span class="line">    -&gt; WHEN 0 THEN &#39;女&#39;</span><br><span class="line">    -&gt; WHEN 2 THEN &#39;未知&#39;</span><br><span class="line">    -&gt; END</span><br><span class="line">    -&gt; WHERE gender IN (0,1,2);</span><br><span class="line">Query OK, 5 rows affected (0.01 sec)</span><br><span class="line">Rows matched: 5  Changed: 5  Warnings: 0</span><br><span class="line"></span><br><span class="line">mysql&gt; SELECT * FROM person;</span><br><span class="line">+----+---------+--------+------+--------+</span><br><span class="line">| id | country | name   | age  | gender |</span><br><span class="line">+----+---------+--------+------+--------+</span><br><span class="line">|  3 | china   | tom    |   12 | 男     |</span><br><span class="line">|  7 | usa     | kobe   |   10 | 男     |</span><br><span class="line">|  8 | usa     | james  |   20 | 男     |</span><br><span class="line">|  9 | usa     | grace  |   30 | 女     |</span><br><span class="line">| 10 | japan   | monica |   40 | 未知   |</span><br><span class="line">+----+---------+--------+------+--------+</span><br><span class="line">5 rows in set (0.00 sec)</span><br></pre></td></tr></table></figure><p><strong>注意事项：一定要有WHERE gender IN的限制，否则不在WHEN中的记录就会被置为NULL</strong><br>CASE..WHEN还有其他一些高级用法，等用到的时候再慢慢研究，比如可以用它做行转列操作。</p><h3><span id="1-2-4-fu-he-tiao-jian-shi-yong">1.2.4 复合条件使用</span><a href="#1-2-4-fu-he-tiao-jian-shi-yong" class="header-anchor">#</a></h3><p>比如上面定义青年的时候，我们把条件修改一下，我们把大于等于12岁，并且小于等于32岁的叫做青年</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line">mysql&gt; SELECT * FROM person;</span><br><span class="line">+----+---------+--------+------+--------+</span><br><span class="line">| id | country | name   | age  | gender |</span><br><span class="line">+----+---------+--------+------+--------+</span><br><span class="line">|  3 | china   | tom    |   12 | 男     |</span><br><span class="line">|  7 | usa     | kobe   |   10 | 男     |</span><br><span class="line">|  8 | usa     | james  |   20 | 男     |</span><br><span class="line">|  9 | usa     | grace  |   30 | 女     |</span><br><span class="line">| 10 | japan   | monica |   40 | 未知   |</span><br><span class="line">+----+---------+--------+------+--------+</span><br><span class="line">5 rows in set (0.00 sec)</span><br><span class="line"></span><br><span class="line">mysql&gt; SELECT id,&#96;name&#96;,CASE</span><br><span class="line">    -&gt; WHEN age&gt;&#x3D;12 AND age&lt;&#x3D;32 THEN &#39;青年&#39;</span><br><span class="line">    -&gt; ELSE &#39;忽略&#39;</span><br><span class="line">    -&gt; END &#39;状态&#39;</span><br><span class="line">    -&gt; FROM person;</span><br><span class="line">+----+--------+--------+</span><br><span class="line">| id | name   | 状态   |</span><br><span class="line">+----+--------+--------+</span><br><span class="line">|  3 | tom    | 青年   |</span><br><span class="line">|  7 | kobe   | 忽略   |</span><br><span class="line">|  8 | james  | 青年   |</span><br><span class="line">|  9 | grace  | 青年   |</span><br><span class="line">| 10 | monica | 忽略   |</span><br><span class="line">+----+--------+--------+</span><br><span class="line">5 rows in set (0.00 sec)</span><br></pre></td></tr></table></figure><p><strong>总结</strong>:在WHEN条件使用时可以使用AND进行连接，进行复合条件的判断</p><blockquote><p><a href="https://www.jianshu.com/p/c2b086fb7b48" target="_blank" rel="noopener">参考博客</a><br><a href="https://www.cnblogs.com/chenduzizhong/p/9590741.html" target="_blank" rel="noopener">行转列参考博客</a><br><a href="https://blog.csdn.net/qb170217/article/details/81504578" target="_blank" rel="noopener">复合条件参考博客</a>  </p></blockquote><h1><span id="2-mysql-zhong-de-ifnull-nullif-he-isnull-yong-fa-xiang-jie">2.MySql中的IFNULL、NULLIF和ISNULL用法详解</span><a href="#2-mysql-zhong-de-ifnull-nullif-he-isnull-yong-fa-xiang-jie" class="header-anchor">#</a></h1><h2><span id="2-1-isnull-yong-fa">2.1 isnull用法</span><a href="#2-1-isnull-yong-fa" class="header-anchor">#</a></h2><p><strong>用法</strong>：isnull(expr)<br><strong>解析</strong>：如expr 为null，那么isnull() 的返回值为 1，否则返回值为 0。<br><strong>实例</strong>：这里还使用上面的person表</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">mysql&gt; SELECT * FROM person;</span><br><span class="line">+----+---------+--------+------+--------+</span><br><span class="line">| id | country | name   | age  | gender |</span><br><span class="line">+----+---------+--------+------+--------+</span><br><span class="line">|  3 | china   | tom    |   12 | 男     |</span><br><span class="line">|  7 | usa     | kobe   |   10 | 男     |</span><br><span class="line">|  8 | usa     | james  |   20 | 男     |</span><br><span class="line">|  9 | usa     | grace  |   30 | 女     |</span><br><span class="line">| 10 | japan   | monica | NULL | 未知   |</span><br><span class="line">+----+---------+--------+------+--------+</span><br><span class="line">5 rows in set (0.00 sec)</span><br><span class="line"></span><br><span class="line">mysql&gt; SELECT id,name,ISNULL(age) FROM person;</span><br><span class="line">+----+--------+-------------+</span><br><span class="line">| id | name   | ISNULL(age) |</span><br><span class="line">+----+--------+-------------+</span><br><span class="line">|  3 | tom    |           0 |</span><br><span class="line">|  7 | kobe   |           0 |</span><br><span class="line">|  8 | james  |           0 |</span><br><span class="line">|  9 | grace  |           0 |</span><br><span class="line">| 10 | monica |           1 |</span><br><span class="line">+----+--------+-------------+</span><br><span class="line">5 rows in set (0.00 sec)</span><br></pre></td></tr></table></figure><h2><span id="2-2-ifnull-yong-fa">2.2 ifnull用法</span><a href="#2-2-ifnull-yong-fa" class="header-anchor">#</a></h2><p><strong>用法</strong>:IFNULL(expr1,expr2)<br><strong>解析</strong>：假如expr1 不为 NULL，则 IFNULL() 的返回值为 expr1;<br>否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串，具体情况取决于其所使用的语境。<br><strong>实例</strong>：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">mysql&gt; SELECT * FROM person;</span><br><span class="line">+----+---------+--------+------+--------+</span><br><span class="line">| id | country | name   | age  | gender |</span><br><span class="line">+----+---------+--------+------+--------+</span><br><span class="line">|  3 | china   | tom    |   12 | 男     |</span><br><span class="line">|  7 | usa     | kobe   |   10 | 男     |</span><br><span class="line">|  8 | usa     | james  |   20 | 男     |</span><br><span class="line">|  9 | usa     | grace  |   30 | 女     |</span><br><span class="line">| 10 | japan   | monica | NULL | 未知   |</span><br><span class="line">+----+---------+--------+------+--------+</span><br><span class="line">5 rows in set (0.00 sec)</span><br><span class="line"></span><br><span class="line">mysql&gt; SELECT id,name,IFNULL(age,&#39;无&#39;) FROM person;</span><br><span class="line">+----+--------+-------------------+</span><br><span class="line">| id | name   | IFNULL(age,&#39;无&#39;)  |</span><br><span class="line">+----+--------+-------------------+</span><br><span class="line">|  3 | tom    | 12                |</span><br><span class="line">|  7 | kobe   | 10                |</span><br><span class="line">|  8 | james  | 20                |</span><br><span class="line">|  9 | grace  | 30                |</span><br><span class="line">| 10 | monica | 无                |</span><br><span class="line">+----+--------+-------------------+</span><br><span class="line">5 rows in set (0.00 sec)</span><br></pre></td></tr></table></figure><h2><span id="2-3-nullif-yong-fa">2.3 nullif用法</span><a href="#2-3-nullif-yong-fa" class="header-anchor">#</a></h2><p><strong>用法</strong>：NULLIF(expr1,expr2)<br><strong>解析</strong>：如果expr1= expr2 成立，那么返回值为NULL，否则返回值为 expr1。这和CASE WHEN expr1 = expr2  THEN NULL ELSE expr1 END相同。<br><strong>实例</strong>：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">mysql&gt; SELECT NULLIF(&#39;男&#39;,&#39;女&#39;);</span><br><span class="line">+---------------------+</span><br><span class="line">| NULLIF(&#39;男&#39;,&#39;女&#39;)   |</span><br><span class="line">+---------------------+</span><br><span class="line">| 男                  |</span><br><span class="line">+---------------------+</span><br><span class="line">1 row in set (0.00 sec)</span><br><span class="line"></span><br><span class="line">mysql&gt; SELECT NULLIF(&#39;男&#39;,&#39;男&#39;);</span><br><span class="line">+---------------------+</span><br><span class="line">| NULLIF(&#39;男&#39;,&#39;男&#39;)   |</span><br><span class="line">+---------------------+</span><br><span class="line">| NULL                |</span><br><span class="line">+---------------------+</span><br><span class="line">1 row in set (0.00 sec)</span><br><span class="line"></span><br><span class="line">结果：当expr1和expr2不相等的时候，返回expr1，也就是‘男’，第二个例子相等的时候，返回的是NULL.</span><br></pre></td></tr></table></figure><blockquote><p><a href="https://www.jb51.net/article/93101.htm" target="_blank" rel="noopener">nullif,isnull,ifnull参考博客</a>  </p></blockquote><h1><span id="3-lian-jie-cha-xun">3.连结查询</span><a href="#3-lian-jie-cha-xun" class="header-anchor">#</a></h1><p><strong>构造数据</strong>-创建表</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">创建作者author表</span><br><span class="line">mysql&gt; CREATE TABLE author(</span><br><span class="line">    -&gt; author_id INT(2) PRIMARY KEY,</span><br><span class="line">    -&gt; name VARCHAR(20));</span><br><span class="line">    </span><br><span class="line">    </span><br><span class="line">创建图书bookinfo表</span><br><span class="line">mysql&gt; CREATE TABLE bookinfo(</span><br><span class="line">    -&gt; id INT(2) PRIMARY KEY,</span><br><span class="line">    -&gt; name VARCHAR(10),</span><br><span class="line">    -&gt; publisher_id INT(2), #这里是指出版商的id</span><br><span class="line">    -&gt; author_id INT(2), #这里是指作者表的ID</span><br><span class="line">    -&gt; price INT(2));</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">创建出版商publisher表</span><br><span class="line">mysql&gt; CREATE TABLE publisher(</span><br><span class="line">    -&gt; publisher_id INT(2) PRIMARY KEY,</span><br><span class="line">    -&gt; name VARCHAR(10));</span><br></pre></td></tr></table></figure><p><strong>构造数据</strong>-添加数据</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line">插入author表数据</span><br><span class="line">INSERT INTO &#96;author&#96;(&#96;author_id&#96;, &#96;name&#96;) VALUES (1, &#39;修昔底德&#39;);</span><br><span class="line">INSERT INTO &#96;author&#96;(&#96;author_id&#96;, &#96;name&#96;) VALUES (2, &#39;小仲马&#39;);</span><br><span class="line">INSERT INTO &#96;author&#96;(&#96;author_id&#96;, &#96;name&#96;) VALUES (3, &#39;柏拉图&#39;);</span><br><span class="line">INSERT INTO &#96;author&#96;(&#96;author_id&#96;, &#96;name&#96;) VALUES (4, &#39;亚里士多德&#39;);</span><br><span class="line">INSERT INTO &#96;author&#96;(&#96;author_id&#96;, &#96;name&#96;) VALUES (5, &#39;维吉尔&#39;);</span><br><span class="line">INSERT INTO &#96;author&#96;(&#96;author_id&#96;, &#96;name&#96;) VALUES (6, &#39;普鲁塔克&#39;);</span><br><span class="line">INSERT INTO &#96;author&#96;(&#96;author_id&#96;, &#96;name&#96;) VALUES (7, &#39;徐焰&#39;);</span><br><span class="line">INSERT INTO &#96;author&#96;(&#96;author_id&#96;, &#96;name&#96;) VALUES (8, &#39;老舍&#39;);</span><br><span class="line"></span><br><span class="line">插入bookinfo表数据</span><br><span class="line">对应字段顺序(&#96;id&#96;, &#96;name&#96;, &#96;publisher_id&#96;, &#96;author_id&#96;, &#96;price&#96;)</span><br><span class="line">INSERT INTO &#96;bookinfo&#96; VALUES (1, &#39;《伯罗奔尼撒战争史》&#39;, 1, 1, 11);</span><br><span class="line">INSERT INTO &#96;bookinfo&#96; VALUES (2, &#39;《茶花女》&#39;, 2, 2, 22);</span><br><span class="line">INSERT INTO &#96;bookinfo&#96; VALUES (3, &#39;《对话录》 &#39;, 3, 3, 22);</span><br><span class="line">INSERT INTO &#96;bookinfo&#96; VALUES (4, &#39;《伦理学》&#39;, 4, 4, 44);</span><br><span class="line">INSERT INTO &#96;bookinfo&#96; VALUES (5, &#39;《埃涅阿斯记》&#39;, 5, 5, 55);</span><br><span class="line">INSERT INTO &#96;bookinfo&#96; VALUES (6, &#39;《希腊罗马英雄史》 &#39;, 6, 6, 66);</span><br><span class="line">INSERT INTO &#96;bookinfo&#96; VALUES (7, &#39;《共产党人的故事》&#39;, 7, 7, 77);</span><br><span class="line">INSERT INTO &#96;bookinfo&#96; VALUES (8, &#39;《四世同堂》&#39;, 8, 8, 88);</span><br><span class="line"></span><br><span class="line">插入publisher表数据</span><br><span class="line">INSERT INTO &#96;publisher&#96;(&#96;publisher_id&#96;, &#96;name&#96;) VALUES (1, &#39;经济日报出版社&#39;);</span><br><span class="line">INSERT INTO &#96;publisher&#96;(&#96;publisher_id&#96;, &#96;name&#96;) VALUES (2, &#39;外语教学与研究出版社&#39;);</span><br><span class="line">INSERT INTO &#96;publisher&#96;(&#96;publisher_id&#96;, &#96;name&#96;) VALUES (3, &#39;中国纺织出版社&#39;);</span><br><span class="line">INSERT INTO &#96;publisher&#96;(&#96;publisher_id&#96;, &#96;name&#96;) VALUES (4, &#39;编译出版社&#39;);</span><br><span class="line">INSERT INTO &#96;publisher&#96;(&#96;publisher_id&#96;, &#96;name&#96;) VALUES (5, &#39;中国言实出版社&#39;);</span><br><span class="line">INSERT INTO &#96;publisher&#96;(&#96;publisher_id&#96;, &#96;name&#96;) VALUES (6, &#39;东方出版社&#39;);</span><br><span class="line">INSERT INTO &#96;publisher&#96;(&#96;publisher_id&#96;, &#96;name&#96;) VALUES (7, &#39;北京工艺美术出版社&#39;);</span><br><span class="line">INSERT INTO &#96;publisher&#96;(&#96;publisher_id&#96;, &#96;name&#96;) VALUES (8, &#39;文津出版社&#39;);</span><br></pre></td></tr></table></figure><p><strong>构造数据</strong>-数据</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br></pre></td><td class="code"><pre><span class="line">mysql&gt; SELECT * FROM author;</span><br><span class="line">+-----------+-----------------+</span><br><span class="line">| author_id | name            |</span><br><span class="line">+-----------+-----------------+</span><br><span class="line">|         1 | 修昔底德        |</span><br><span class="line">|         2 | 小仲马          |</span><br><span class="line">|         3 | 柏拉图          |</span><br><span class="line">|         4 | 亚里士多德      |</span><br><span class="line">|         5 | 维吉尔          |</span><br><span class="line">|         6 | 普鲁塔克        |</span><br><span class="line">|         7 | 徐焰            |</span><br><span class="line">|         8 | 老舍            |</span><br><span class="line">+-----------+-----------------+</span><br><span class="line">8 rows in set (0.00 sec)</span><br><span class="line"></span><br><span class="line">mysql&gt; SELECT * FROM bookinfo;</span><br><span class="line">+----+--------------------------------+--------------+-----------+-------+</span><br><span class="line">| id | name                           | publisher_id | author_id | price |</span><br><span class="line">+----+--------------------------------+--------------+-----------+-------+</span><br><span class="line">|  1 | 《伯罗奔尼撒战争史》           |            1 |         1 |    11 |</span><br><span class="line">|  2 | 《茶花女》                     |            2 |         2 |    22 |</span><br><span class="line">|  3 | 《对话录》                     |            3 |         3 |    22 |</span><br><span class="line">|  4 | 《伦理学》                     |            4 |         4 |    44 |</span><br><span class="line">|  5 | 《埃涅阿斯记》                 |            5 |         5 |    55 |</span><br><span class="line">|  6 | 《希腊罗马英雄史》             |            6 |         6 |    66 |</span><br><span class="line">|  7 | 《共产党人的故事》             |            7 |         7 |    77 |</span><br><span class="line">|  8 | 《四世同堂》                   |            8 |         8 |    88 |</span><br><span class="line">+----+--------------------------------+--------------+-----------+-------+</span><br><span class="line">8 rows in set (0.00 sec)</span><br><span class="line"></span><br><span class="line">mysql&gt; SELECT * FROM publisher;</span><br><span class="line">+--------------+--------------------------------+</span><br><span class="line">| publisher_id | name                           |</span><br><span class="line">+--------------+--------------------------------+</span><br><span class="line">|            1 | 经济日报出版社                 |</span><br><span class="line">|            2 | 外语教学与研究出版社           |</span><br><span class="line">|            3 | 中国纺织出版社                 |</span><br><span class="line">|            4 | 编译出版社                     |</span><br><span class="line">|            5 | 中国言实出版社                 |</span><br><span class="line">|            6 | 东方出版社                     |</span><br><span class="line">|            7 | 北京工艺美术出版社             |</span><br><span class="line">|            8 | 文津出版社                     |</span><br><span class="line">+--------------+--------------------------------+</span><br><span class="line">8 rows in set (0.00 sec)</span><br></pre></td></tr></table></figure><h2><span id="3-1-left-join-zuo-lian-jie-cha-xun">3.1 LEFT JOIN 左连结查询</span><a href="#3-1-left-join-zuo-lian-jie-cha-xun" class="header-anchor">#</a></h2><p><strong>用法</strong>：SELECT XXX  FROM left_table <strong>LEFT JOIN</strong> right_table <strong>ON</strong> left_table.key=right_table.key</p><p><strong>解析</strong>：LEFT JOIN … ON   </p><p>LEFT JOIN 关键字会从左表 (left_table) 那里返回所有的行，即使在右表 (right_table ) 中没有匹配的行。</p><p>情况一：如果左表中的数据多，而右表中的数据少，那么没查询到的数据会显示NULL,但是左表的数据会全部返回；</p><p>情况二：如果左表中的数据少，而由表中的数据多（这里的多是指有重复数据，非重复数据见情况一），那么在返回左表数据时也会有重复；</p><h3><span id="3-1-1-ji-ben-shi-yong-shi-li">3.1.1 基本使用示例</span><a href="#3-1-1-ji-ben-shi-yong-shi-li" class="header-anchor">#</a></h3><p><strong>情况一</strong>：为了满足情况一，这里多添加一条出版商记录</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">INSERT INTO &#96;publisher&#96;(&#96;publisher_id&#96;, &#96;name&#96;) VALUES (9, &#39;新华出版社&#39;);</span><br></pre></td></tr></table></figure><p>测试结果1：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">mysql&gt; INSERT INTO &#96;publisher&#96;(&#96;publisher_id&#96;, &#96;name&#96;) VALUES (9, &#39;新华出版社&#39;);</span><br><span class="line">Query OK, 1 row affected (0.00 sec)</span><br><span class="line"></span><br><span class="line">mysql&gt; SELECT * FROM publisher pub LEFT JOIN bookinfo book ON book.publisher_id&#x3D;pub.publisher_id;</span><br><span class="line">+-------+---------------------+----+--------------------+-------+---------+-----+</span><br><span class="line">| publis| name                |id  | name               |publi  |author_id|price|</span><br><span class="line">| her_id|                     |    |                    |sher_id|         |     |   </span><br><span class="line">+-------+---------------------+----+--------------------+-------+---------+-----+</span><br><span class="line">|  1    | 经济日报出版社        |   1|《伯罗奔尼撒战争史》    |    1  |        1|   11|</span><br><span class="line">|  2    | 外语教学与研究出版社   |   2| 《茶花女》           |    2  |        2|   22|</span><br><span class="line">|  3    | 中国纺织出版社        |   3| 《对话录》           |    3  |        3|   22|</span><br><span class="line">|  4    | 编译出版社           |   4| 《伦理学》           |    4  |        4|   44|</span><br><span class="line">|  5    | 中国言实出版社        |   5| 《埃涅阿斯记》        |    5  |        5|   55|</span><br><span class="line">|  6    | 东方出版社           |   6| 《希腊罗马英雄史》     |    6  |        6|   66|</span><br><span class="line">|  7    | 北京工艺美术出版社     |   7| 《共产党人的故事》     |    7  |        7|   77|</span><br><span class="line">|  8    | 文津出版社           |   8| 《四世同堂》           |    8  |        8|   88|</span><br><span class="line">|  9    | 新华出版社           |NULL| NULL                 | NULL  |     NULL| NULL|</span><br><span class="line">+-------+---------------------+----+--------------------+-------+---------+-----+</span><br></pre></td></tr></table></figure><p>可以看出，由于左表中有9条数据，而右表bookinfo中有8条数据，所以左表中的第9条数据，对应的bookinfo显示为NULL;</p><p><strong>情况一</strong>:右表有重复数据的情况</p><p>为了满足条件，需要插入一条重复bookinfo数据</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">INSERT INTO &#96;bookinfo&#96; VALUES (9, &#39;《四世同堂》&#39;, 8, 8, 88);</span><br></pre></td></tr></table></figure><p>测试结果2：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">mysql&gt; SELECT * FROM publisher pub LEFT JOIN bookinfo book ON book.publisher_id&#x3D;pub.publisher_id;</span><br><span class="line">+-------------+---------+------+--------------+--------------+-----------+-------+</span><br><span class="line">|publisher_id | name    | id   | name         | publisher_id | author_id | price |</span><br><span class="line">+-------------+---------+------+--------------+--------------+-----------+-------+</span><br><span class="line">|  1 | 经济日报出版社     |1     | 《伯罗奔尼撒战争史》 |    1     |     1 |    11 |</span><br><span class="line">|  2 | 外语教学与研究出版社| 2    | 《茶花女》         |    2     |     2 |    22 |</span><br><span class="line">|  3 | 中国纺织出版社     | 3    | 《对话录》         |    3      |     3 |    22 |</span><br><span class="line">|  4 | 编译出版社        | 4    | 《伦理学》         |    4      |     4 |    44 |</span><br><span class="line">|  5 | 中国言实出版社     | 5    | 《埃涅阿斯记》      |    5     |     5 |    55 |</span><br><span class="line">|  6 | 东方出版社         | 6   | 《希腊罗马英雄史》   |    6     |     6 |    66 |</span><br><span class="line">|  7 | 北京工艺美术出版社 | 7    | 《共产党人的故事》   |    7      |     7 |    77 |</span><br><span class="line">|  8 | 文津出版社         | 8   | 《四世同堂》        |    8      |     8 |    88 |</span><br><span class="line">|  8 | 文津出版社         | 9   | 《四世同堂》        |    8      |     8 |    88 |</span><br><span class="line">|  9 | 新华出版社         | NULL | NULL             | NULL      |  NULL |  NULL |</span><br><span class="line">+-------------+----------+------+-----------------+------------+-----------+-------+</span><br></pre></td></tr></table></figure><p>从上面可以看出，在查询时，由于bookinfo表中有重复的两条，即根据ON条件，publisher_id有2个为8的，所以在返回结果中会出现两条重复的数据，要注意这个问题。</p><h3><span id="3-1-2-duo-biao-lian-jie-cha-xun">3.1.2 多表连结查询</span><a href="#3-1-2-duo-biao-lian-jie-cha-xun" class="header-anchor">#</a></h3><p>为了能够看出多表连结时ON的选用条件不一样，导致的查询结果也不一致的情况，在author表中添加一条数据</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">INSERT INTO &#96;author&#96;(&#96;author_id&#96;, &#96;name&#96;) VALUES (9, &#39;钱钟书&#39;);</span><br></pre></td></tr></table></figure><p>测试结果3：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">mysql&gt; SELECT * FROM publisher pub LEFT JOIN bookinfo book ON book.publisher_id&#x3D;pub.publisher_id</span><br><span class="line">    -&gt; LEFT JOIN author auth ON auth.author_id&#x3D;book.author_id;</span><br><span class="line">+--------------+--------------------------------+------+--------------------------------+--------------+-----------+-------+-----------+-----------------+</span><br><span class="line">| publisher_id | name                           | id   | name                           | publisher_id | author_id | price | author_id | name            |</span><br><span class="line">+--------------+--------------------------------+------+--------------------------------+--------------+-----------+-------+-----------+-----------------+</span><br><span class="line">|            1 | 经济日报出版社                 |    1 | 《伯罗奔尼撒战争史》           |            1 |         1 |    11 |         1 | 修昔底德        |</span><br><span class="line">|            2 | 外语教学与研究出版社           |    2 | 《茶花女》                     |            2 |         2 |    22 |         2 | 小仲马          |</span><br><span class="line">|            3 | 中国纺织出版社                 |    3 | 《对话录》                     |            3 |         3 |    22 |         3 | 柏拉图          |</span><br><span class="line">|            4 | 编译出版社                     |    4 | 《伦理学》                     |            4 |         4 |    44 |         4 | 亚里士多德      |</span><br><span class="line">|            5 | 中国言实出版社                 |    5 | 《埃涅阿斯记》                 |            5 |         5 |    55 |         5 | 维吉尔          |</span><br><span class="line">|            6 | 东方出版社                     |    6 | 《希腊罗马英雄史》             |            6 |         6 |    66 |         6 | 普鲁塔克        |</span><br><span class="line">|            7 | 北京工艺美术出版社             |    7 | 《共产党人的故事》             |            7 |         7 |    77 |         7 | 徐焰            |</span><br><span class="line">|            8 | 文津出版社                     |    8 | 《四世同堂》                   |            8 |         8 |    88 |         8 | 老舍            |</span><br><span class="line">|            8 | 文津出版社                     |    9 | 《四世同堂》                   |            8 |         8 |    88 |         8 | 老舍            |</span><br><span class="line">|            9 | 新华出版社                     | NULL | NULL                           |         NULL |      NULL |  NULL |      NULL | NULL            |</span><br><span class="line">+--------------+--------------------------------+------+--------------------------------+--------------+-----------+-------+-----------+-----------------+</span><br><span class="line">10 rows in set (0.00 sec)</span><br></pre></td></tr></table></figure><p>上面示例的连结条件是：</p><p>以publisher为主表，LEFT JOIN首先连结bookinfo，连结条件book.publisher_id=pub.publisher_id，此时得到的一个表（假使有这个表，实际不会有这个步骤存在）</p><p><img src="https://note.youdao.com/yws/public/resource/08f2d93624c3197b2b490e255cfcf723/xmlnote/9859ED717ACE4EA68F9608D605E974AA/13930" alt="image"></p><p>然后再用这个中间的大表作为主表，再LEFT JOIN author 表，ON auth.author_id=book.author_id，因为中间表此时是主表，再以这个表的book.author_id去查找，本身自己就是NULL,所以查找的结果还是NULL,见下图</p><p><img src="https://note.youdao.com/yws/public/resource/08f2d93624c3197b2b490e255cfcf723/xmlnote/54C6D4F680A745918BAD054B4410DC01/13933" alt="最终左连结结果"></p><p>对应的模型如下：</p><p><img src="https://note.youdao.com/yws/public/resource/08f2d93624c3197b2b490e255cfcf723/xmlnote/5EB39E524BBD41BA9F594B4EAC81D670/13935" alt="模型图"></p><p>测试结果4：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">mysql&gt; SELECT * FROM publisher pub LEFT JOIN bookinfo book ON book.publisher_id&#x3D;pub.publisher_id</span><br><span class="line">    -&gt; LEFT JOIN author auth ON auth.author_id&#x3D;pub.publisher_id;</span><br><span class="line">+--------------+--------------------------------+------+--------------------------------+--------------+-----------+-------+-----------+-----------------+</span><br><span class="line">| publisher_id | name                           | id   | name                           | publisher_id | author_id | price | author_id | name            |</span><br><span class="line">+--------------+--------------------------------+------+--------------------------------+--------------+-----------+-------+-----------+-----------------+</span><br><span class="line">|            1 | 经济日报出版社                 |    1 | 《伯罗奔尼撒战争史》           |            1 |         1 |    11 |         1 | 修昔底德        |</span><br><span class="line">|            2 | 外语教学与研究出版社           |    2 | 《茶花女》                     |            2 |         2 |    22 |         2 | 小仲马          |</span><br><span class="line">|            3 | 中国纺织出版社                 |    3 | 《对话录》                     |            3 |         3 |    22 |         3 | 柏拉图          |</span><br><span class="line">|            4 | 编译出版社                     |    4 | 《伦理学》                     |            4 |         4 |    44 |         4 | 亚里士多德      |</span><br><span class="line">|            5 | 中国言实出版社                 |    5 | 《埃涅阿斯记》                 |            5 |         5 |    55 |         5 | 维吉尔          |</span><br><span class="line">|            6 | 东方出版社                     |    6 | 《希腊罗马英雄史》             |            6 |         6 |    66 |         6 | 普鲁塔克        |</span><br><span class="line">|            7 | 北京工艺美术出版社             |    7 | 《共产党人的故事》             |            7 |         7 |    77 |         7 | 徐焰            |</span><br><span class="line">|            8 | 文津出版社                     |    8 | 《四世同堂》                   |            8 |         8 |    88 |         8 | 老舍            |</span><br><span class="line">|            8 | 文津出版社                     |    9 | 《四世同堂》                   |            8 |         8 |    88 |         8 | 老舍            |</span><br><span class="line">|            9 | 新华出版社                     | NULL | NULL                           |         NULL |      NULL |  NULL |         9 | 钱钟书          |</span><br><span class="line">+--------------+--------------------------------+------+--------------------------------+--------------+-----------+-------+-----------+-----------------+</span><br><span class="line">10 rows in set (0.00 sec)</span><br></pre></td></tr></table></figure><p>上面示例的连结条件是：</p><p>以publisher为主表，LEFT JOIN首先连结bookinfo，连结条件book.publisher_id=pub.publisher_id，此时得到的一个表，如下</p><p><img src="https://note.youdao.com/yws/public/resource/08f2d93624c3197b2b490e255cfcf723/xmlnote/9859ED717ACE4EA68F9608D605E974AA/13930" alt="image"></p><p>但是再第二次连结author的时候，继续以publisher表为主表，进行ON auth.author_id=pub.publisher_id，这时候得到的结果如下：</p><p><img src="https://note.youdao.com/yws/public/resource/08f2d93624c3197b2b490e255cfcf723/xmlnote/E3AF61753F0E45249E70C02238B248B4/13938" alt="结果图片2"></p><p>注意此时连结后的author信息不为空了。</p><p>对应的连结模型如下：</p><p><img src="https://note.youdao.com/yws/public/resource/08f2d93624c3197b2b490e255cfcf723/xmlnote/35D85B4E70464AF89699C7572B538B0B/13941" alt="模型2"></p><p><strong>总结</strong>：这说明在连结的时候，不同的表作为连结条件，获得的结果会不一样，同时主表的数据会全部展示，但是也可能会多，有可能连结表有重复数据，需要注意。</p><h2><span id="3-2-right-join-you-lian-jie-cha-xun">3.2 RIGHT JOIN 右连结查询</span><a href="#3-2-right-join-you-lian-jie-cha-xun" class="header-anchor">#</a></h2><p><strong>用法</strong>：SELECT XXX  FROM left_table  <strong>RIGHT JOIN</strong> main_table <strong>ON</strong> left_table.key=main_table.key</p><p><strong>解析</strong>：RIGHT JOIN … ON   </p><p>RIGHT JOIN 关键字会右表 (main_table) 那里返回所有的行，即使在左表 ( left_table) 中没有匹配的行。</p><p><strong>注意</strong>：在LEFT JOIN中，左边的表为主表，但是在RIGHT JOIN中，RIGHT JOIN哪个表，哪个表就作为主表，会返回所有的行</p><h3><span id="3-2-1-ji-ben-shi-yong-shi-li">3.2.1 基本使用示例</span><a href="#3-2-1-ji-ben-shi-yong-shi-li" class="header-anchor">#</a></h3><p>这个操作还是在上面表的基础上进行的</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line">mysql&gt; SELECT * FROM publisher;</span><br><span class="line">+--------------+--------------------------------+</span><br><span class="line">| publisher_id | name                           |</span><br><span class="line">+--------------+--------------------------------+</span><br><span class="line">|            1 | 经济日报出版社                 |</span><br><span class="line">|            2 | 外语教学与研究出版社           |</span><br><span class="line">|            3 | 中国纺织出版社                 |</span><br><span class="line">|            4 | 编译出版社                     |</span><br><span class="line">|            5 | 中国言实出版社                 |</span><br><span class="line">|            6 | 东方出版社                     |</span><br><span class="line">|            7 | 北京工艺美术出版社             |</span><br><span class="line">|            8 | 文津出版社                     |</span><br><span class="line">|            9 | 新华出版社                     |</span><br><span class="line">+--------------+--------------------------------+</span><br><span class="line">9 rows in set (0.00 sec)</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">mysql&gt; SELECT * FROM bookinfo;</span><br><span class="line">+----+--------------------------------+--------------+-----------+-------+</span><br><span class="line">| id | name                           | publisher_id | author_id | price |</span><br><span class="line">+----+--------------------------------+--------------+-----------+-------+</span><br><span class="line">|  1 | 《伯罗奔尼撒战争史》           |            1 |         1 |    11 |</span><br><span class="line">|  2 | 《茶花女》                     |            2 |         2 |    22 |</span><br><span class="line">|  3 | 《对话录》                     |            3 |         3 |    22 |</span><br><span class="line">|  4 | 《伦理学》                     |            4 |         4 |    44 |</span><br><span class="line">|  5 | 《埃涅阿斯记》                 |            5 |         5 |    55 |</span><br><span class="line">|  6 | 《希腊罗马英雄史》             |            6 |         6 |    66 |</span><br><span class="line">|  7 | 《共产党人的故事》             |            7 |         7 |    77 |</span><br><span class="line">|  8 | 《四世同堂》                   |            8 |         8 |    88 |</span><br><span class="line">|  9 | 《四世同堂》                   |            8 |         8 |    88 |</span><br><span class="line">+----+--------------------------------+--------------+-----------+-------+</span><br><span class="line">9 rows in set (0.00 sec)</span><br></pre></td></tr></table></figure><p>示例使用的SQL如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">SELECT * FROM bookinfo book RIGHT JOIN publisher pub ON book.publisher_id&#x3D;pub.publisher_id;</span><br></pre></td></tr></table></figure><p>查询结果如下：</p><p><img src="https://note.youdao.com/yws/public/resource/08f2d93624c3197b2b490e255cfcf723/xmlnote/A98AB8B45D04473BBB11B36E9224F4E5/13943" alt="查询结果2"></p><p><strong>总结</strong>：RIGHT JOIN查询的时候用被连结的表publisher作为主表，返回所有数据，RIGHT JOIN左边的就是从表，如果没有匹配到的就展示为NULL.</p><p><strong>其他</strong>：RIGHT JOIN的多表查询情况跟LEFT JOIN类似，这里不再赘述</p><blockquote><p><a href="https://www.w3school.com.cn/sql/sql_join_right.asp" target="_blank" rel="noopener">参考博客</a>  </p><p><a href="https://blog.csdn.net/lp_cq242/article/details/79942457" target="_blank" rel="noopener">参考博客</a>  </p><p><a href="https://www.cnblogs.com/bad-robot/p/9788959.html" target="_blank" rel="noopener">参考博客</a>  </p></blockquote><h1><span id="4-mysqldump-dao-chu-shu-ju-ku-bao-cuo-does-not-exist-when-using-lock-tables">4.mysqldump 导出数据库报错“does not exist when using LOCK TABLES”</span><a href="#4-mysqldump-dao-chu-shu-ju-ku-bao-cuo-does-not-exist-when-using-lock-tables" class="header-anchor">#</a></h1><p>在使用mysqldump进行数据备份的时候报错：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mysqldump: Got error: 1449: The user specified as a definer (&#39;admin&#39;@&#39;%&#39;) does not exist when using</span><br></pre></td></tr></table></figure><p>应该是schedule 数据库在使用状态，所以导出数据时报错，在mysqldump时使用<strong>-x</strong> 选项解决此问题。</p><h1><span id="5-cuo-wu-jie-jue-ben-di-ji-suan-ji-shang-de-mysql-fu-wu-qi-dong-ting-zhi-hou-mou-xie-fu-wu-zai-wei-you-qi-ta-fu-wu-huo-cheng-xu-shi-yong-shi-jiang-zi-dong-ting-zhi">5.【错误解决】本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止</span><a href="#5-cuo-wu-jie-jue-ben-di-ji-suan-ji-shang-de-mysql-fu-wu-qi-dong-ting-zhi-hou-mou-xie-fu-wu-zai-wei-you-qi-ta-fu-wu-huo-cheng-xu-shi-yong-shi-jiang-zi-dong-ting-zhi" class="header-anchor">#</a></h1><p>本地win10 安装的mysql有一天重启机器后突然不能启动了，启动报错：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">本地计算机上的mysql服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。</span><br></pre></td></tr></table></figure><p>我的mysql版本是5.7  ，电脑是win10</p><p><strong>解决过程</strong>：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line">步骤一：</span><br><span class="line">备份原来mysql目录下的data数据</span><br><span class="line"></span><br><span class="line">步骤二：</span><br><span class="line">在mysql的安装目录的bin目录下执行：</span><br><span class="line">D:\mysql\mysql-5.7.23-winx64\bin&gt;mysqld --remove mysql</span><br><span class="line">Service successfully removed.</span><br><span class="line"></span><br><span class="line">步骤三：初始</span><br><span class="line">D:\mysql\mysql-5.7.23-winx64\bin&gt;mysqld --initialize-insecure --user&#x3D;mysql</span><br><span class="line"></span><br><span class="line">步骤四：安装mysql服务</span><br><span class="line">D:\mysql\mysql-5.7.23-winx64\bin&gt;mysqld --install mysql</span><br><span class="line">Service successfully installed.</span><br><span class="line"></span><br><span class="line">步骤五：启动mysql服务</span><br><span class="line">D:\mysql\mysql-5.7.23-winx64\bin&gt;net start mysql</span><br><span class="line">mysql 服务正在启动 .</span><br><span class="line">mysql 服务已经启动成功。</span><br><span class="line"></span><br><span class="line">步骤六：登录，root密码为空</span><br><span class="line">D:\mysql\mysql-5.7.23-winx64\bin&gt;mysql -u root -p</span><br></pre></td></tr></table></figure><p>配置完之后修改对应的root密码,sql见下</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">mysql&gt; ALTER USER &#39;root&#39;@&#39;localhost&#39; IDENTIFIED BY &#39;123456&#39;;</span><br><span class="line">Query OK, 0 rows affected (0.01 sec)</span><br><span class="line"></span><br><span class="line">mysql&gt; GRANT ALL PRIVILEGES ON *.* TO &#39;root&#39;@&#39;%&#39; IDENTIFIED BY &#39;123456&#39; with grant option;</span><br><span class="line">Query OK, 0 rows affected, 1 warning (0.01 sec)</span><br></pre></td></tr></table></figure><p>配置完之后就可以登录了，由于我是测试库，原来的数据没有移动回来，有需要的同学可以自行研究。</p><blockquote><p><a href="https://blog.csdn.net/fan_lulu/article/details/82011994" target="_blank" rel="noopener">参考博客</a></p></blockquote>]]></content>
    
    <summary type="html">
    
      对MySQL也没有系统的学习，在平时使用MySQL的过程中将遇到的一些知识进行简单的总结，并对其用具体的小例子进行说，并不断完善对MySQL的认识，希望在以后的工作中，对MySQL的使用也会越来越多，包括数据库管理和数据库调优等。
    
    </summary>
    
    
    
      <category term="MySQL" scheme="https://babachuan.github.io/tags/MySQL/"/>
    
  </entry>
  
  <entry>
    <title>测试理论</title>
    <link href="https://babachuan.github.io/2020/02/16/%E6%B5%8B%E8%AF%95%E7%90%86%E8%AE%BA/"/>
    <id>https://babachuan.github.io/2020/02/16/%E6%B5%8B%E8%AF%95%E7%90%86%E8%AE%BA/</id>
    <published>2020-02-16T04:52:20.000Z</published>
    <updated>2020-02-16T05:25:19.090Z</updated>
    
    <content type="html"><![CDATA[<h1><span id="1-li-lun-ji-chu">1.理论基础</span><a href="#1-li-lun-ji-chu" class="header-anchor">#</a></h1><p>理论基础</p><h1><span id="2-shi-jian">2.实践</span><a href="#2-shi-jian" class="header-anchor">#</a></h1><p>实践</p>]]></content>
    
    <summary type="html">
    
      一片关于测试理论的文章一片关于测试理论的文章一片关于测试理论的文章一片关于测试理论的文章，一片关于测试理论的文章一片关于测试理论的文章，一片关于测试理论的文章一片关于测试理论的文章，一片关于测试理论的文章一片关于测试理论的文章，一片关于测试理论的文章一片关于测试理论的文章，一片关于测试理论的文章一片关于测试理论的文章，一片关于测试理论的文章一片关于测试理论的文章，一片关于测试理论的文章一片关于测试理论的文章，一片关于测试理论的文章一片关于测试理论的文章，一片关于测试理论的文章一片关于测试理论的文章，一片关于测试理论的文章一片关于测试理论的文章，一片关于测试理论的文章一片关于测试理论的文章。
    
    </summary>
    
    
    
      <category term="测试" scheme="https://babachuan.github.io/tags/%E6%B5%8B%E8%AF%95/"/>
    
  </entry>
  
  <entry>
    <title>git</title>
    <link href="https://babachuan.github.io/2020/02/16/github/"/>
    <id>https://babachuan.github.io/2020/02/16/github/</id>
    <published>2020-02-16T04:52:07.000Z</published>
    <updated>2020-03-27T01:50:11.098Z</updated>
    
    <content type="html"><![CDATA[<div class="toc"><!-- toc --><ul><li><a href="#1-git-mian-mi-ma-jin-xing-ti-jiao-pei-zhi-wen-jian">1. git免密码进行提交-配置文件</a><ul><li><a href="#1-1-xu-qiu">1.1 需求</a></li><li><a href="#1-2-mian-mi-ti-jiao-she-zhi">1.2 免密提交设置</a></li></ul></li><li><a href="#2-dui-github-bian-xie-de-markdown-wen-jian-zi-dong-sheng-cheng-mu-lu">2. 对Github编写的Markdown文件自动生成目录</a></li><li><a href="#3-git-guo-lu-wen-jian">3.Git过滤文件</a></li><li><a href="#4-pull-bao-cuo-ssl">4.pull报错SSL</a></li></ul><!-- tocstop --></div><h1><span id="1-git-mian-mi-ma-jin-xing-ti-jiao-pei-zhi-wen-jian">1. git免密码进行提交-配置文件</span><a href="#1-git-mian-mi-ma-jin-xing-ti-jiao-pei-zhi-wen-jian" class="header-anchor">#</a></h1><h2><span id="1-1-xu-qiu">1.1 需求</span><a href="#1-1-xu-qiu" class="header-anchor">#</a></h2><p>在平时编写文档的过程中，需要经常bash提交代码（可能还有更快捷的方式），本来想自己编写批处理文件进行自动化处理，发现原来git本身就有这样的设计。开始也是百度了各种博客，从config入手，但是总是遇<code>fatal: unable to get credential storage lock: File exists</code>错误，升级了git客户端也不好使，最终找到了可行的解决方法。</p><h2><span id="1-2-mian-mi-ti-jiao-she-zhi">1.2 免密提交设置</span><a href="#1-2-mian-mi-ti-jiao-she-zhi" class="header-anchor">#</a></h2><p>这个设置只针对指定项目，不是全局设置。</p><p>找到项目的.git目录里的config文件，文件的内容如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">[core]</span><br><span class="line">repositoryformatversion &#x3D; 0</span><br><span class="line">filemode &#x3D; false</span><br><span class="line">bare &#x3D; false</span><br><span class="line">logallrefupdates &#x3D; true</span><br><span class="line">symlinks &#x3D; false</span><br><span class="line">ignorecase &#x3D; true</span><br><span class="line">[remote &quot;origin&quot;]</span><br><span class="line">url &#x3D; https:&#x2F;&#x2F;github.com&#x2F;babachuan&#x2F;Spring.git</span><br><span class="line">fetch &#x3D; +refs&#x2F;heads&#x2F;*:refs&#x2F;remotes&#x2F;origin&#x2F;*</span><br><span class="line">[branch &quot;master&quot;]</span><br><span class="line">remote &#x3D; origin</span><br><span class="line">merge &#x3D; refs&#x2F;heads&#x2F;master</span><br><span class="line">[gui]</span><br><span class="line">wmstate &#x3D; normal</span><br><span class="line">geometry &#x3D; 1055x555+128+128 229 251</span><br></pre></td></tr></table></figure><p>只需要在remote的url设置成如下格式即可：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">url &#x3D; https:&#x2F;&#x2F;账号名:密码@github.com&#x2F;babachuan&#x2F;Spring.git</span><br></pre></td></tr></table></figure><blockquote><p><a href="https://www.cnblogs.com/weibanggang/p/9447997.html" target="_blank" rel="noopener">参考博客</a></p></blockquote><h1><span id="2-dui-github-bian-xie-de-markdown-wen-jian-zi-dong-sheng-cheng-mu-lu">2. 对Github编写的Markdown文件自动生成目录</span><a href="#2-dui-github-bian-xie-de-markdown-wen-jian-zi-dong-sheng-cheng-mu-lu" class="header-anchor">#</a></h1><p>平时在编写README.md的时候，使用toc标签并不能在github上自动生成目录，在网上找了一篇帖子，用python目录自动生成，把脚本改良后如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line">#!&#x2F;usr&#x2F;bin&#x2F;evn python</span><br><span class="line">#-*-coding:utf-8-*-</span><br><span class="line">import re</span><br><span class="line">import string</span><br><span class="line"></span><br><span class="line">lines&#x3D;open(&quot;I:\\个人\\博客管理\\Github\\Spring\\spring\\spring-conditionbeans\\README.md&quot;,encoding&#x3D;&#39;utf-8&#39;)</span><br><span class="line">print(&#39;&lt;nav&gt;&#39;)</span><br><span class="line">print(&#39;&lt;a href&#x3D;&quot;#&quot;&gt;&lt;&#x2F;a&gt;&lt;br&#x2F;&gt;&#39;)</span><br><span class="line"># 解析内容并生成目录</span><br><span class="line">for line in lines:</span><br><span class="line">    if line.startswith(&quot;#&quot;):</span><br><span class="line">        line &#x3D; line.strip().split(&quot; &quot;, 1)</span><br><span class="line"></span><br><span class="line">        # 缩进</span><br><span class="line">        indentation &#x3D; &quot;&amp;nbsp;&quot; * 4 * (len(line[0]) - 1)</span><br><span class="line"></span><br><span class="line">        # 标题</span><br><span class="line">        title &#x3D; line[1].replace(&quot; &quot;, &quot;&amp;nbsp;&quot;)</span><br><span class="line"></span><br><span class="line">        # 去掉特殊字符，空格替换为-,注意标题中尽量不要出现@ # &#x2F; _ 等特殊字符，以免github定位不准</span><br><span class="line">        herf &#x3D; re.compile(r&#39;&lt;[^&gt;]+&gt;&#39;, re.S).sub(&#39;&#39;, line[1])</span><br><span class="line">        herf &#x3D; herf.translate(str.maketrans(&#39;&#39;, &#39;&#39;, string.punctuation))</span><br><span class="line">        herf &#x3D; herf.replace(&quot; &quot;, &quot;-&quot;)</span><br><span class="line"></span><br><span class="line">        out_line &#x3D; &quot;%s&lt;a href&#x3D;\&quot;#%s\&quot;&gt;%s&lt;&#x2F;a&gt;&lt;br&#x2F;&gt;&quot; % (indentation, title, herf)</span><br><span class="line"></span><br><span class="line">        print(out_line)</span><br><span class="line">lines.close()</span><br><span class="line">print(&#39;&lt;&#x2F;nav&gt;&#39;)</span><br></pre></td></tr></table></figure><p><em>注意</em>：</p><ul><li>使用时需要指定README.md路径<code>lines=open(&quot;xxx\\README.md&quot;,encoding=&#39;utf-8&#39;)</code></li><li>在编写Markdown文件的时候，不要使用<code>#</code>开头做注解</li><li>将打印处理的结果直接复制粘贴到MD文件的开头处即可。</li></ul><h1><span id="3-git-guo-lu-wen-jian">3.Git过滤文件</span><a href="#3-git-guo-lu-wen-jian" class="header-anchor">#</a></h1><p>在平时使用git的过程中，经常需要提交代码，但是像.idea和class文件又不需要提交，所以需要进行过滤，方法如下：</p><p><strong>第一步</strong>：添加<code>.gitignore</code>文件</p><p>往项目根目录添加一个文件”.gitignore”。这文件和”.git”文件夹同级。</p><p>可以在Git bash里执行<code>touch .gitignore</code>命令</p><p><strong>第二步</strong>：设置过滤条件</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">spring&#x2F;*&#x2F;.idea &#x2F;&#x2F;把第三级目录下的.idea文件顾虑</span><br><span class="line">spring&#x2F;*&#x2F;*.iml &#x2F;&#x2F;把第三级目录下的以.iml结尾的文件顾虑</span><br><span class="line">spring&#x2F;*&#x2F;target &#x2F;&#x2F;把第三级目录下的target文件夹过滤</span><br></pre></td></tr></table></figure><p><strong>第三步</strong>：把<code>.gitignore</code>文件提交并且push到服务器</p><p>其它的协作成员可以通过pull获取这个文件,其它人的过滤规则保持一致了。</p><p>1.如果新建一个空的Git仓库。直接拉取就可以了。</p><p>2.如果是一个已经使用了Git仓库，如果需要应用规则，则需要通过命令把相应要过滤的目录</p><p>的缓存删除。</p><p>git rm –cached &lt;文件名&gt; 删除文件的缓存</p><p>git rm –cached -r &lt;目录名&gt; 删除目录下的所有文件的缓存</p><p>通过上面的命令把缓存删除后，commit后再push到服务器。</p><p>其它的团队成员可以直接pull，过滤功能就能正常使用了。</p><h1><span id="4-pull-bao-cuo-ssl">4.pull报错SSL</span><a href="#4-pull-bao-cuo-ssl" class="header-anchor">#</a></h1><p>在pull仓库的时候报错：<code>[Git Pull Failed: unable to access &#39;***&#39;: SSL certificate problem: self signed certificate in certificate chain])</code></p><p><strong>解决方案如下</strong>：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">打开控制台运行：【git config --global http.sslVerify false】</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      Git使用过程总结
    
    </summary>
    
    
    
      <category term="Git" scheme="https://babachuan.github.io/tags/Git/"/>
    
  </entry>
  
  <entry>
    <title>FastDFS</title>
    <link href="https://babachuan.github.io/2020/02/16/FastDFS/"/>
    <id>https://babachuan.github.io/2020/02/16/FastDFS/</id>
    <published>2020-02-16T04:51:55.000Z</published>
    <updated>2020-02-16T04:51:55.371Z</updated>
    
    <summary type="html">
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>activeMQ</title>
    <link href="https://babachuan.github.io/2020/02/16/activeMQ/"/>
    <id>https://babachuan.github.io/2020/02/16/activeMQ/</id>
    <published>2020-02-16T04:51:42.000Z</published>
    <updated>2020-02-16T04:51:42.398Z</updated>
    
    <summary type="html">
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>mongodb</title>
    <link href="https://babachuan.github.io/2020/02/16/mongodb/"/>
    <id>https://babachuan.github.io/2020/02/16/mongodb/</id>
    <published>2020-02-16T04:49:14.000Z</published>
    <updated>2020-02-20T08:53:32.231Z</updated>
    
    <content type="html"><![CDATA[<p><a href="mysql.md">mysql.md</a></p>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;&lt;a href=&quot;mysql.md&quot;&gt;mysql.md&lt;/a&gt;&lt;/p&gt;

      
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>springcloud</title>
    <link href="https://babachuan.github.io/2020/02/16/springcloud/"/>
    <id>https://babachuan.github.io/2020/02/16/springcloud/</id>
    <published>2020-02-16T04:48:50.000Z</published>
    <updated>2020-02-16T04:48:50.288Z</updated>
    
    <summary type="html">
    
    </summary>
    
    
    
  </entry>
  
  <entry>
    <title>java基础</title>
    <link href="https://babachuan.github.io/2020/02/16/java%E5%9F%BA%E7%A1%80/"/>
    <id>https://babachuan.github.io/2020/02/16/java%E5%9F%BA%E7%A1%80/</id>
    <published>2020-02-16T04:48:36.000Z</published>
    <updated>2020-04-16T02:43:40.724Z</updated>
    
    <content type="html"><![CDATA[<p>[toc]</p><h1><span id="1-yong-java-dai-ma-zhi-xing-linux-ming-ling">1.用java代码执行linux命令</span><a href="#1-yong-java-dai-ma-zhi-xing-linux-ming-ling" class="header-anchor">#</a></h1><p>用java代码执行Linux命令，并得到对应的返回值</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">import java.io.BufferedReader;</span><br><span class="line">import java.io.IOException;</span><br><span class="line">import java.io.InputStreamReader;</span><br><span class="line"></span><br><span class="line">public  class CMDUtils &#123;</span><br><span class="line">    private String cmds;</span><br><span class="line"></span><br><span class="line">    public CMDUtils(String cmds) &#123;</span><br><span class="line">        this.cmds &#x3D; cmds;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    public String getCmds() &#123;</span><br><span class="line">        return cmds;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    public void setCmds(String cmds) &#123;</span><br><span class="line">        this.cmds &#x3D; cmds;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    public Object cmd()&#123;</span><br><span class="line">        System.out.println(&quot;执行的命令是：&quot;+this.cmds);</span><br><span class="line">        String[] cmd &#x3D; new String[]&#123;&quot;&#x2F;bin&#x2F;sh&quot;, &quot;-c&quot;, this.cmds&#125;;</span><br><span class="line">        Process process &#x3D; null;</span><br><span class="line">        try &#123;</span><br><span class="line">            process &#x3D; Runtime.getRuntime().exec(cmd);</span><br><span class="line"></span><br><span class="line">            BufferedReader buffer &#x3D; new BufferedReader(new InputStreamReader(process.getInputStream()));</span><br><span class="line">            StringBuffer stringBuffer &#x3D; new StringBuffer();</span><br><span class="line">            String line;</span><br><span class="line">            while ((line &#x3D; buffer.readLine()) !&#x3D; null) &#123;</span><br><span class="line">                stringBuffer.append(line).append(&quot;\n&quot;);</span><br><span class="line">            &#125;</span><br><span class="line">            String result &#x3D; stringBuffer.toString();</span><br><span class="line">            System.out.println(&quot;执行的结果是：&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&quot;);</span><br><span class="line">            System.out.println(result);</span><br><span class="line">            return result;</span><br><span class="line">        &#125; catch (IOException e) &#123;</span><br><span class="line">            e.printStackTrace();</span><br><span class="line">            return  null;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>这样执行过命令后会返回对应的执行结果。测试代码如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">public class MyTest &#123;</span><br><span class="line">    public static void main(String args[]) &#123;</span><br><span class="line">        System.out.println(&quot;hello world&quot;);</span><br><span class="line">        String cmds &#x3D; &quot;df -h&quot;;</span><br><span class="line">        CMDUtils cmdUtils &#x3D; new CMDUtils(cmds);</span><br><span class="line">        String result &#x3D; (String) cmdUtils.cmd();</span><br><span class="line">        System.out.println(&quot;我拿到的结果是：&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&quot;);</span><br><span class="line">        System.out.println(result);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>测试结果如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">[geneplus@OncoBox-19 quhaichuan]$ javac MyTest.java</span><br><span class="line">[geneplus@OncoBox-19 quhaichuan]$ java MyTest</span><br><span class="line">hello world</span><br><span class="line">执行的命令是：df -h</span><br><span class="line">执行的结果是：&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;</span><br><span class="line">Filesystem               Size  Used Avail Use% Mounted on</span><br><span class="line">&#x2F;dev&#x2F;mapper&#x2F;centos-root  213G  144G   70G  68% &#x2F;</span><br><span class="line">devtmpfs                  63G     0   63G   0% &#x2F;dev</span><br><span class="line">tmpfs                     63G   76K   63G   1% &#x2F;dev&#x2F;shm</span><br><span class="line">tmpfs                     63G  3.1G   60G   5% &#x2F;run</span><br><span class="line">tmpfs                     63G     0   63G   0% &#x2F;sys&#x2F;fs&#x2F;cgroup</span><br><span class="line">&#x2F;dev&#x2F;sda1                7.3T  2.3T  5.1T  31% &#x2F;mnt&#x2F;ONCOBOX</span><br><span class="line">&#x2F;dev&#x2F;sdb1                2.0G  171M  1.9G   9% &#x2F;boot</span><br><span class="line">tmpfs                     13G   36K   13G   1% &#x2F;run&#x2F;user&#x2F;1001</span><br><span class="line"></span><br><span class="line">我拿到的结果是：&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;&#x3D;</span><br><span class="line">Filesystem               Size  Used Avail Use% Mounted on</span><br><span class="line">&#x2F;dev&#x2F;mapper&#x2F;centos-root  213G  144G   70G  68% &#x2F;</span><br><span class="line">devtmpfs                  63G     0   63G   0% &#x2F;dev</span><br><span class="line">tmpfs                     63G   76K   63G   1% &#x2F;dev&#x2F;shm</span><br><span class="line">tmpfs                     63G  3.1G   60G   5% &#x2F;run</span><br><span class="line">tmpfs                     63G     0   63G   0% &#x2F;sys&#x2F;fs&#x2F;cgroup</span><br><span class="line">&#x2F;dev&#x2F;sda1                7.3T  2.3T  5.1T  31% &#x2F;mnt&#x2F;ONCOBOX</span><br><span class="line">&#x2F;dev&#x2F;sdb1                2.0G  171M  1.9G   9% &#x2F;boot</span><br><span class="line">tmpfs                     13G   36K   13G   1% &#x2F;run&#x2F;user&#x2F;1001</span><br></pre></td></tr></table></figure><p>上面在linux环境下编译<code>javac MyTest.java</code>后，执行的结果可以看到如上。</p><blockquote><p><a href="https://ishare.iask.sina.com.cn/f/2YZHzpbG2yY.html" target="_blank" rel="noopener">参考博客</a></p></blockquote>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;[toc]&lt;/p&gt;
&lt;h1&gt;&lt;span id=&quot;1-yong-java-dai-ma-zhi-xing-linux-ming-ling&quot;&gt;1.用java代码执行linux命令&lt;/span&gt;&lt;a href=&quot;#1-yong-java-dai-ma-zhi-xing-linux
      
    
    </summary>
    
    
    
      <category term="java" scheme="https://babachuan.github.io/tags/java/"/>
    
  </entry>
  
  <entry>
    <title>python</title>
    <link href="https://babachuan.github.io/2020/02/16/python/"/>
    <id>https://babachuan.github.io/2020/02/16/python/</id>
    <published>2020-02-16T04:46:25.000Z</published>
    <updated>2020-03-18T05:19:12.541Z</updated>
    
    <content type="html"><![CDATA[<p>[toc]</p><h1><span id="1-unicodedecodeerror-bao-cuo">1.UnicodeDecodeError报错</span><a href="#1-unicodedecodeerror-bao-cuo" class="header-anchor">#</a></h1><p>在本地win上使用python3调试的程序放到linux 的python2上运行报错</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">UnicodeDecodeError: &#39;ascii&#39; codec can&#39;t decode byte 0xe8 in position</span><br></pre></td></tr></table></figure><p>经过搜索，发现应该是因为python2.x的默认编码是ascii，而代码中可能由utf-8的字符导致，解决方法是设置utf-8。</p><p>解决方案</p><p>找到出错的文件，在import后增加下面几行</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">import sys</span><br><span class="line">if sys.getdefaultencoding() !&#x3D; &#39;utf-8&#39;:</span><br><span class="line">    reload(sys)</span><br><span class="line">    sys.setdefaultencoding(&#39;utf-8&#39;)</span><br></pre></td></tr></table></figure><p>或者</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">import sys</span><br><span class="line">reload(sys)</span><br><span class="line">sys.setdefaultencoding(&#39;utf8&#39;)</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;p&gt;[toc]&lt;/p&gt;
&lt;h1&gt;&lt;span id=&quot;1-unicodedecodeerror-bao-cuo&quot;&gt;1.UnicodeDecodeError报错&lt;/span&gt;&lt;a href=&quot;#1-unicodedecodeerror-bao-cuo&quot; class=&quot;header-
      
    
    </summary>
    
    
    
      <category term="python" scheme="https://babachuan.github.io/tags/python/"/>
    
  </entry>
  
  <entry>
    <title>Pandas基础</title>
    <link href="https://babachuan.github.io/2020/02/15/Pandas%E5%9F%BA%E7%A1%80%E4%BD%BF%E7%94%A8/"/>
    <id>https://babachuan.github.io/2020/02/15/Pandas%E5%9F%BA%E7%A1%80%E4%BD%BF%E7%94%A8/</id>
    <published>2020-02-15T14:35:26.195Z</published>
    <updated>2020-02-19T12:47:36.344Z</updated>
    
    <content type="html"><![CDATA[<div class="toc"><!-- toc --><ul><li><a href="#1-an-zhuang">1.安装</a></li><li><a href="#2-pandas-huo-qu-csv-excel-de-di-yi-xing-lie-biao-qian">2.pandas获取csv\Excel的第一行（列标签）</a></li><li><a href="#3-huo-qu-excel-de-zui-da-xing-he-zui-da-lie">3.获取excel的最大行和最大列</a></li><li><a href="#4-xian-shi-lie-ming-ji-dui-ying-xu-hao">4.显示列名及对应序号</a></li><li><a href="#5-da-yin-zhi-ding-dan-yuan-ge">5.打印指定单元格</a></li><li><a href="#6-gen-ju-lie-ming-cha-kan-lie-de-nei-rong">6.根据列名查看列的内容</a></li><li><a href="#7-gen-ju-lie-de-xu-hao-cha-kan-zhi-ding-lie-nei-rong">7.根据列的序号查看指定列内容</a></li><li><a href="#8-cha-kan-gu-ding-xing-de-nei-rong">8.查看固定行的内容</a></li><li><a href="#9-bian-li-zheng-ge-biao-ge">9.遍历整个表格</a></li><li><a href="#10-du-qu-excel-shi-dai-lie-ming-du-qu">10.读取excel时带列名读取</a></li><li><a href="#11-cao-zuo-excel-cha-ru-lie">11.操作excel插入列</a><ul><li><a href="#11-1-cha-ru-xing-lie-cao-zuo">11.1 插入行列操作</a></li><li><a href="#11-2-cha-ru-shi-zuo-bian-duo-yi-lie-de-wen-ti">11.2 插入时左边多一列的问题</a></li><li><a href="#11-3-she-zhi-lie-kuan">11.3设置列宽</a><ul><li><a href="#11-3-1-shi-ji-shi-yong-de-yi-ge-cheng-xu-li-zi">11.3.1 实际使用的一个程序例子</a></li></ul></li></ul></li></ul><!-- tocstop --></div># 1.安装pandas处理excel需要xlrd、openpyxl依赖包<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">pip install pandas</span><br><span class="line">pip install xlrd</span><br><span class="line">pip install openpyxl</span><br></pre></td></tr></table></figure><h1><span id="2-pandas-huo-qu-csv-excel-de-di-yi-xing-lie-biao-qian">2.pandas获取csv\Excel的第一行（列标签）</span><a href="#2-pandas-huo-qu-csv-excel-de-di-yi-xing-lie-biao-qian" class="header-anchor">#</a></h1><p>一般来说excel第一行是列标签，平时读取第一行也是从数据行来读取的，那么如何读取第一行列标签呢  </p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&gt;&gt;&gt; import pandas as pd</span><br><span class="line">&gt;&gt;&gt; path&#x3D;&quot;I:\\download\\临时\\test.xlsx&quot;</span><br><span class="line">&gt;&gt;&gt; data&#x3D;pd.read_excel(path)</span><br><span class="line">&gt;&gt;&gt; list(data.columns.values)</span><br></pre></td></tr></table></figure><p>这样就能拿到所有的列标签</p><h1><span id="3-huo-qu-excel-de-zui-da-xing-he-zui-da-lie">3.获取excel的最大行和最大列</span><a href="#3-huo-qu-excel-de-zui-da-xing-he-zui-da-lie" class="header-anchor">#</a></h1><p>==注意：这里获取到的行是不包括第一行（标签名）==<br><img src="1C4585815AB14373B3B97CB11FAFC2C7" alt="image"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">&gt;&gt;&gt; import pandas as pd</span><br><span class="line">&gt;&gt;&gt; path&#x3D;&quot;I:\\download\\临时\\test.xlsx&quot;</span><br><span class="line">&gt;&gt;&gt; data&#x3D;pd.read_excel(path)</span><br><span class="line">#获取最大行，不包括标签</span><br><span class="line">&gt;&gt;&gt; nrows&#x3D;data.shape[0]</span><br><span class="line">5  </span><br><span class="line">#获取最大列</span><br><span class="line">&gt;&gt;&gt; ncols&#x3D;data.columns.size</span><br><span class="line">100</span><br><span class="line"></span><br><span class="line">print(&#39;Max Rows:&#39;+str(nrows))</span><br><span class="line">print(&#39;Max Columns&#39;+str(ncols))</span><br></pre></td></tr></table></figure><h1><span id="4-xian-shi-lie-ming-ji-dui-ying-xu-hao">4.显示列名及对应序号</span><a href="#4-xian-shi-lie-ming-ji-dui-ying-xu-hao" class="header-anchor">#</a></h1><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">#!&#x2F;usr&#x2F;bin&#x2F;evn python</span><br><span class="line">#-*-coding:utf-8-*-</span><br><span class="line"></span><br><span class="line">import pandas as pd</span><br><span class="line"></span><br><span class="line">path&#x3D;&quot;I:\\download\\临时\\test.xlsx&quot;</span><br><span class="line"></span><br><span class="line">data&#x3D;pd.read_excel(path)</span><br><span class="line">nrows&#x3D;data.shape[0]</span><br><span class="line">ncols&#x3D;data.columns.size</span><br><span class="line"></span><br><span class="line">#显示列名，并显示列名序号</span><br><span class="line">for iCol in range(ncols):</span><br><span class="line">    print(str(iCol)+&quot;:&quot;+data.columns[iCol])</span><br></pre></td></tr></table></figure><p>运行结果：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">0:Chr</span><br><span class="line">1:Start</span><br><span class="line">2:Stop</span><br><span class="line">3:Ref</span><br><span class="line">4:Call</span><br><span class="line">5:MapLoc</span><br></pre></td></tr></table></figure><h1><span id="5-da-yin-zhi-ding-dan-yuan-ge">5.打印指定单元格</span><a href="#5-da-yin-zhi-ding-dan-yuan-ge" class="header-anchor">#</a></h1><p><img src="4AA58F982DA348FAA4D1E323D800732F" alt="image"><br>打印第二行，第四列  </p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">#!&#x2F;usr&#x2F;bin&#x2F;evn python</span><br><span class="line">#-*-coding:utf-8-*-</span><br><span class="line"></span><br><span class="line">import pandas as pd</span><br><span class="line"></span><br><span class="line">path&#x3D;&quot;I:\\download\\临时\\test.xlsx&quot;</span><br><span class="line"></span><br><span class="line">data&#x3D;pd.read_excel(path)</span><br><span class="line">nrows&#x3D;data.shape[0]</span><br><span class="line">ncols&#x3D;data.columns.size</span><br><span class="line"></span><br><span class="line">#打印指定单元格</span><br><span class="line">print(data.iloc[0,3])</span><br></pre></td></tr></table></figure><p>运行结果：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">C  #打印正确</span><br></pre></td></tr></table></figure><h1><span id="6-gen-ju-lie-ming-cha-kan-lie-de-nei-rong">6.根据列名查看列的内容</span><a href="#6-gen-ju-lie-ming-cha-kan-lie-de-nei-rong" class="header-anchor">#</a></h1><p><img src="CC19CF513A0D4673ABBDAA1E2038A5F9" alt="image">  </p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">#!&#x2F;usr&#x2F;bin&#x2F;evn python</span><br><span class="line">#-*-coding:utf-8-*-</span><br><span class="line"></span><br><span class="line">import pandas as pd</span><br><span class="line"></span><br><span class="line">path&#x3D;&quot;I:\\download\\临时\\test.xlsx&quot;</span><br><span class="line">data&#x3D;pd.read_excel(path)</span><br><span class="line">#查看指定列的内容</span><br><span class="line">print(data[&#39;Ref&#39;])</span><br></pre></td></tr></table></figure><p>运行结果：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">0    C</span><br><span class="line">1    T</span><br><span class="line">2    G</span><br><span class="line">3    G</span><br><span class="line">4    G</span><br><span class="line">Name: Ref, dtype: object</span><br></pre></td></tr></table></figure><h1><span id="7-gen-ju-lie-de-xu-hao-cha-kan-zhi-ding-lie-nei-rong">7.根据列的序号查看指定列内容</span><a href="#7-gen-ju-lie-de-xu-hao-cha-kan-zhi-ding-lie-nei-rong" class="header-anchor">#</a></h1><p><img src="095D5A4B7E0F4484A28B3A97F3D707CE" alt="image"><br><strong>方法一</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">#!&#x2F;usr&#x2F;bin&#x2F;evn python</span><br><span class="line">#-*-coding:utf-8-*-</span><br><span class="line">import pandas as pd</span><br><span class="line"></span><br><span class="line">path&#x3D;&quot;I:\\download\\临时\\test.xlsx&quot;</span><br><span class="line">data&#x3D;pd.read_excel(path)</span><br><span class="line">#根据列的序号查看指定列:第四列的内容</span><br><span class="line">sColumnName&#x3D;data.columns[3]</span><br><span class="line">print(data[sColumnName])</span><br></pre></td></tr></table></figure><p>运行结果：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">0    C</span><br><span class="line">1    T</span><br><span class="line">2    G</span><br><span class="line">3    G</span><br><span class="line">4    G</span><br><span class="line">Name: Ref, dtype: object</span><br></pre></td></tr></table></figure><p><strong>方法二</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">#!&#x2F;usr&#x2F;bin&#x2F;evn python</span><br><span class="line">#-*-coding:utf-8-*-</span><br><span class="line">import pandas as pd</span><br><span class="line"></span><br><span class="line">path&#x3D;&quot;I:\\download\\临时\\test.xlsx&quot;</span><br><span class="line">data&#x3D;pd.read_excel(path,sheet_name&#x3D;&quot;SmallVariations&quot;)</span><br><span class="line">#查看某一列的值</span><br><span class="line">print(data[&#39;Ref&#39;].values)</span><br></pre></td></tr></table></figure><p>这种方法更为简便，注意读取excel时如果要用这种方法，就不能添加header=None,不然会报错，运行结果：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">[&#39;C&#39; &#39;T&#39; &#39;G&#39; &#39;G&#39; &#39;G&#39;]</span><br></pre></td></tr></table></figure><h1><span id="8-cha-kan-gu-ding-xing-de-nei-rong">8.查看固定行的内容</span><a href="#8-cha-kan-gu-ding-xing-de-nei-rong" class="header-anchor">#</a></h1><p><img src="482C157BF6254D03B5C20817EE2EECF8" alt="image"><br><strong>方法一</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">#!&#x2F;usr&#x2F;bin&#x2F;evn python</span><br><span class="line">#-*-coding:utf-8-*-</span><br><span class="line">import pandas as pd</span><br><span class="line"></span><br><span class="line">path&#x3D;&quot;I:\\download\\临时\\test.xlsx&quot;</span><br><span class="line">data&#x3D;pd.read_excel(path)</span><br><span class="line">nrows&#x3D;data.shape[0]</span><br><span class="line">ncols&#x3D;data.columns.size</span><br><span class="line">#查看某行的内容(第四行，行从0开始)</span><br><span class="line">iRow&#x3D;3</span><br><span class="line">for iCol in range(ncols):</span><br><span class="line">    print(data.iloc[iRow,iCol])</span><br></pre></td></tr></table></figure><p>运行结果：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">1</span><br><span class="line">11190610</span><br><span class="line">11190611</span><br><span class="line">G</span><br><span class="line">A</span><br><span class="line">1p36.22</span><br><span class="line">snv</span><br><span class="line">SomMajor</span><br><span class="line">NDPLow</span><br><span class="line">...</span><br><span class="line">..</span><br></pre></td></tr></table></figure><p><strong>方法二</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">#!&#x2F;usr&#x2F;bin&#x2F;evn python</span><br><span class="line">#-*-coding:utf-8-*-</span><br><span class="line">import pandas as pd</span><br><span class="line"></span><br><span class="line">path&#x3D;&quot;I:\\download\\临时\\test.xlsx&quot;</span><br><span class="line">data&#x3D;pd.read_excel(path,sheet_name&#x3D;&quot;SmallVariations&quot;,header&#x3D;None)</span><br><span class="line"># 查看第一行</span><br><span class="line">print(data.values[0])</span><br></pre></td></tr></table></figure><p>这种方法更为简便，运行结果：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[&#39;Chr&#39; &#39;Start&#39; &#39;Stop&#39; &#39;Ref&#39; &#39;Call&#39; &#39;MapLoc&#39; &#39;VarType&#39; &#39;VarTag&#39;</span><br><span class="line"> &#39;siteFilter&#39; &#39;SomConfLev&#39; &#39;SomNotes&#39; &#39;caseRsAD&#39; &#39;caseAD&#39; &#39;caseAF&#39;</span><br><span class="line"> &#39;caseDP&#39;..]</span><br></pre></td></tr></table></figure><h1><span id="9-bian-li-zheng-ge-biao-ge">9.遍历整个表格</span><a href="#9-bian-li-zheng-ge-biao-ge" class="header-anchor">#</a></h1><p><strong>方法一</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">#!&#x2F;usr&#x2F;bin&#x2F;evn python</span><br><span class="line">#-*-coding:utf-8-*-</span><br><span class="line">import pandas as pd</span><br><span class="line"></span><br><span class="line">path&#x3D;&quot;I:\\download\\临时\\test.xlsx&quot;</span><br><span class="line">data&#x3D;pd.read_excel(path)</span><br><span class="line">nrows&#x3D;data.shape[0]</span><br><span class="line">ncols&#x3D;data.columns.size</span><br><span class="line">#遍历整个表格</span><br><span class="line">for iRow in range(nrows):</span><br><span class="line">    for iCol in range(ncols):</span><br><span class="line">        print(data.iloc[iRow,iCol])</span><br></pre></td></tr></table></figure><p><strong>方法二</strong></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">#!&#x2F;usr&#x2F;bin&#x2F;evn python</span><br><span class="line">#-*-coding:utf-8-*-</span><br><span class="line">import pandas as pd</span><br><span class="line"></span><br><span class="line">path&#x3D;&quot;I:\\download\\临时\\test.xlsx&quot;</span><br><span class="line">data&#x3D;pd.read_excel(path,sheet_name&#x3D;&quot;SmallVariations&quot;,header&#x3D;None)</span><br><span class="line"># 查看所有的值</span><br><span class="line">print(data.values)</span><br></pre></td></tr></table></figure><p>这种方法更为直观、简便，运行结果：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[[&#39;Chr&#39; &#39;Start&#39; &#39;Stop&#39; &#39;Ref&#39; &#39;Call&#39; &#39;MapLoc&#39; &#39;VarType&#39; &#39;VarTag&#39;</span><br><span class="line">  &#39;siteFilter&#39; &#39;SomConfLev&#39; &#39;SomNotes&#39; &#39;caseRsAD&#39; &#39;caseAD&#39; &#39;caseAF&#39;</span><br><span class="line">  &#39;caseDP&#39; ..]]</span><br></pre></td></tr></table></figure><h1><span id="10-du-qu-excel-shi-dai-lie-ming-du-qu">10.读取excel时带列名读取</span><a href="#10-du-qu-excel-shi-dai-lie-ming-du-qu" class="header-anchor">#</a></h1><p>读取时增加参数：header=None</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">#!&#x2F;usr&#x2F;bin&#x2F;evn python</span><br><span class="line">#-*-coding:utf-8-*-</span><br><span class="line">import pandas as pd</span><br><span class="line"></span><br><span class="line">path&#x3D;&quot;I:\\download\\临时\\test.xlsx&quot;</span><br><span class="line">data&#x3D;pd.read_excel(path,sheet_name&#x3D;&quot;SmallVariations&quot;,header&#x3D;None)</span><br><span class="line">nrows&#x3D;data.shape[0]</span><br><span class="line">ncols&#x3D;data.columns.size</span><br></pre></td></tr></table></figure><p>运行结果：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Max Rows:6   &#x2F;&#x2F;比上面的读取多了一行</span><br><span class="line">Max Columns:100</span><br></pre></td></tr></table></figure><h1><span id="11-cao-zuo-excel-cha-ru-lie">11.操作excel插入列</span><a href="#11-cao-zuo-excel-cha-ru-lie" class="header-anchor">#</a></h1><p><img src="6B542D80AF324DE3AC9AAB0A5473257B" alt="image">  </p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">#!&#x2F;usr&#x2F;bin&#x2F;evn python</span><br><span class="line">#-*-coding:utf-8-*-</span><br><span class="line">import pandas as pd</span><br><span class="line"></span><br><span class="line">path&#x3D;&quot;I:\\download\\临时\\test2.xlsx&quot;</span><br><span class="line">data&#x3D;pd.read_excel(path,sheet_name&#x3D;&quot;shtt1&quot;)</span><br><span class="line"></span><br><span class="line"># 新增列</span><br><span class="line">tmp&#x3D;data[&#39;Stop&#39;].values</span><br><span class="line">data.insert(6,&#39;Stop2&#39;,tmp)</span><br><span class="line">pd.DataFrame(data).to_excel(&quot;I:\\download\\临时\\test2.xlsx&quot;,sheet_name&#x3D;&quot;shtt1&quot;,index&#x3D;False,header&#x3D;True)</span><br></pre></td></tr></table></figure><p>操作结果：<br><img src="976CFFFF1A494C8BA6F0D4CE68A19B94" alt="image"></p><h2><span id="11-1-cha-ru-xing-lie-cao-zuo">11.1 插入行列操作</span><a href="#11-1-cha-ru-xing-lie-cao-zuo" class="header-anchor">#</a></h2><p><img src="DFAFFC7EC62843159D17BAB68E2DE044" alt="image">  </p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">#!&#x2F;usr&#x2F;bin&#x2F;evn python</span><br><span class="line">#-*-coding:utf-8-*-</span><br><span class="line">import pandas as pd</span><br><span class="line"></span><br><span class="line">path&#x3D;&quot;I:\\download\\临时\\test2.xlsx&quot;</span><br><span class="line">data&#x3D;pd.read_excel(path,sheet_name&#x3D;&quot;sheet1&quot;)</span><br><span class="line">newrow&#x3D;[&#39;孙悟空&#39;,&#39;沙僧&#39;,&#39;八戒&#39;,&#39;小白龙&#39;]</span><br><span class="line">#增加行数据，在第6行增加</span><br><span class="line">data.loc[6]&#x3D;newrow</span><br><span class="line"></span><br><span class="line">#增加列，给定默认值None</span><br><span class="line">data[&#39;成绩&#39;]&#x3D;None</span><br><span class="line"></span><br><span class="line">#列变动后再插入行</span><br><span class="line">newrow2&#x3D;[&#39;孙悟空&#39;,&#39;沙僧&#39;,&#39;八戒&#39;,&#39;小白龙&#39;,&#39;90&#39;]</span><br><span class="line">data.loc[7]&#x3D;newrow2</span><br><span class="line">pd.DataFrame(data).to_excel(&quot;I:\\download\\临时\\test2.xlsx&quot;,sheet_name&#x3D;&quot;sheet1&quot;,index&#x3D;False,header&#x3D;True)</span><br></pre></td></tr></table></figure><p>执行结果：<br><img src="6D4569B051094B6DAF09623018E196DA" alt="image"></p><h2><span id="11-2-cha-ru-shi-zuo-bian-duo-yi-lie-de-wen-ti">11.2 插入时左边多一列的问题</span><a href="#11-2-cha-ru-shi-zuo-bian-duo-yi-lie-de-wen-ti" class="header-anchor">#</a></h2><p><img src="BBE51733BDC04E65BDDC421AE3ACF420" alt="image"><br>使用如下代码编辑后，结果如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">data &#x3D; pd.read_excel(path)</span><br><span class="line">pd.DataFrame(data).to_excel(path, sheet_name&#x3D;&quot;Sheet1&quot;, header&#x3D;True)</span><br></pre></td></tr></table></figure><p>执行结果后结果如下：<br><img src="C1101BA003A24196A2733195C74D2932" alt="image"><br>解决方法：<br>在进行to_excel操作的时候加上参数<strong>index=False</strong>，如下：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line"></span><br><span class="line">pd.DataFrame(data).to_excel(path, sheet_name&#x3D;&quot;Sheet1&quot;,index&#x3D;False, header&#x3D;True)</span><br></pre></td></tr></table></figure><p><img src="F99ECDFCBCD54EFCA99D22F645B87E8E" alt="image">   </p><h2><span id="11-3-she-zhi-lie-kuan">11.3设置列宽</span><a href="#11-3-she-zhi-lie-kuan" class="header-anchor">#</a></h2><p>原始的表格如果列宽不够的话，会隐藏显示，如下图：<br><img src="1584F3D1E0534424815682EEB45CAC97" alt="image"><br>那么如何设置列宽度呢，参见如下代码：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">#创建一个空的Excel</span><br><span class="line">path&#x3D;&quot;I:\\download\\zz.xlsx&quot;</span><br><span class="line"></span><br><span class="line">data &#x3D; pd.read_excel(path)</span><br><span class="line">df &#x3D; pd.DataFrame(data)</span><br><span class="line"></span><br><span class="line"># Create a Pandas Excel writer using XlsxWriter as the engine.</span><br><span class="line">writer &#x3D; pd.ExcelWriter(path, engine&#x3D;&#39;xlsxwriter&#39;)</span><br><span class="line"></span><br><span class="line"># Convert the dataframe to an XlsxWriter Excel object.这里注意index要设置为false，不然结果会多一列数据</span><br><span class="line">df.to_excel(writer, sheet_name&#x3D;&#39;Sheet1&#39;, index&#x3D;False)</span><br><span class="line"></span><br><span class="line"># Get the xlsxwriter objects from the dataframe writer object.</span><br><span class="line">workbook &#x3D; writer.book</span><br><span class="line">worksheet &#x3D; writer.sheets[&#39;Sheet1&#39;]</span><br><span class="line"></span><br><span class="line"># Add some cell formats.</span><br><span class="line">format1 &#x3D; workbook.add_format(&#123;&quot;font_name&quot;: u&quot;微软雅黑&quot;&#125;)</span><br><span class="line"></span><br><span class="line"># Set the column width and format.</span><br><span class="line">worksheet.set_column(&#39;A:B&#39;, 18, format1)</span><br><span class="line">worksheet.set_column(&#39;C:H&#39;, 21, format1)</span><br><span class="line">df.to_excel(path, sheet_name&#x3D;&quot;Sheet1&quot;, index&#x3D;False, header&#x3D;True)</span><br><span class="line">writer.save()</span><br></pre></td></tr></table></figure><p><img src="2B0BBD5F71594E73B714FC09070CAA97" alt="image">  </p><h3><span id="11-3-1-shi-ji-shi-yong-de-yi-ge-cheng-xu-li-zi">11.3.1 实际使用的一个程序例子</span><a href="#11-3-1-shi-ji-shi-yong-de-yi-ge-cheng-xu-li-zi" class="header-anchor">#</a></h3><p>从数据库中用以下SQL将查询出来的数据写入到EXCEL中，并设置列宽  </p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">select trim(BOTH &#39;&quot;&#39; FROM json_extract(esi.fdynamic_attribute,&#39;$.f31&#39;)) as &#39;RUN号&#39;,qc.fsample_code as &#39;样本编号&#39;,</span><br><span class="line">ai.fsubmit_time as &#39;提交时间&#39;,ai.fstart_time as &#39;分析开始时间&#39;,ai.ffinish_time as &#39;分析结束时间&#39;,ai.felapsed_time as &#39;运行耗时&#39;,</span><br><span class="line">trim(BOTH &#39;&quot;&#39; FROM json_extract(rinfo.fdynamic_attribute,&#39;$.f50&#39;)) as &#39;审核时间&#39;,trim(BOTH &#39;&quot;&#39; FROM json_extract(rinfo.fdynamic_attribute,&#39;$.f72&#39;)) as &#39;报告时间&#39; from a_info ai</span><br><span class="line">LEFT JOIN e_sequence_detail esd on (ai.fsequence_detail_id&#x3D;esd.fid)</span><br><span class="line">LEFT JOIN e_sequence_info esi on (esi.fid&#x3D;esd.fsequence_id)</span><br><span class="line">LEFT JOIN qc_info qc on (ai.fid&#x3D;qc.finfo_id)</span><br><span class="line">LEFT JOIN r_info rinfo on (rinfo.fqc_id&#x3D;qc.fid)</span><br><span class="line">where trim(BOTH &#39;&quot;&#39; FROM json_extract(esi.fdynamic_attribute,&#39;$.f31&#39;)) &#x3D;&#39;F300000337&#39;;</span><br></pre></td></tr></table></figure><p><img src="4DD67888E2E3402CADED2AFA0AE1761B" alt="image"><br>编写的Python程序：</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br></pre></td><td class="code"><pre><span class="line">#!&#x2F;usr&#x2F;bin&#x2F;evn python</span><br><span class="line">#-*-coding:utf-8-*-</span><br><span class="line">import pandas as pd</span><br><span class="line">import pymysql</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">class Export(object):</span><br><span class="line">    def __init__(self):</span><br><span class="line">        self.data &#x3D; pd.read_excel(&quot;I:\\download\\zz.xlsx&quot;, sheet_name&#x3D;&quot;Sheet1&quot;)</span><br><span class="line">        self.data[&#39;RUN号&#39;] &#x3D; None</span><br><span class="line">        self.data[&#39;样本编号&#39;] &#x3D; None</span><br><span class="line">        self.data[&#39;提交时间&#39;] &#x3D; None</span><br><span class="line">        self.data[&#39;分析开始时间&#39;] &#x3D; None</span><br><span class="line">        self.data[&#39;分析结束时间&#39;] &#x3D; None</span><br><span class="line">        self.data[&#39;运行耗时&#39;] &#x3D; None</span><br><span class="line">        self.data[&#39;审核时间&#39;] &#x3D; None</span><br><span class="line">        self.data[&#39;报告时间&#39;] &#x3D; None</span><br><span class="line"></span><br><span class="line">    def connect(self):</span><br><span class="line">        db &#x3D;pymysql.connect(&#39;127.0.0.1&#39; ,&#39;root&#39; ,&#39;123456&#39; ,&#39;oncoosplus_zhongzhong&#39; ,use_unicode&#x3D;True, charset&#x3D;&#39;utf8&#39;)</span><br><span class="line">        cursor &#x3D;db.cursor()</span><br><span class="line">        return cursor ,db</span><br><span class="line"></span><br><span class="line">    def getdata(self,runcode):</span><br><span class="line">        cursor,db &#x3D; self.connect()</span><br><span class="line">        sql&#x3D;&#39;&#39;&#39;</span><br><span class="line">        select trim(BOTH &#39;&quot;&#39; FROM json_extract(esi.fdynamic_attribute,&#39;$.f31&#39;)) as &#39;RUN号&#39;,qc.fsample_code as &#39;样本编号&#39;, ai.fsubmit_time as &#39;提交时间&#39;,ai.fstart_time as &#39;分析开始时间&#39;,ai.ffinish_time as &#39;分析结束时间&#39;,ai.felapsed_time as &#39;运行耗时&#39;, trim(BOTH &#39;&quot;&#39; FROM json_extract(rinfo.fdynamic_attribute,&#39;$.f50&#39;)) as &#39;审核时间&#39;,trim(BOTH &#39;&quot;&#39; FROM json_extract(rinfo.fdynamic_attribute,&#39;$.f72&#39;)) as &#39;报告时间&#39; from a_info ai LEFT JOIN e_sequence_detail esd on (ai.fsequence_detail_id&#x3D;esd.fid) LEFT JOIN e_sequence_info esi on (esi.fid&#x3D;esd.fsequence_id) LEFT JOIN qc_info qc on (ai.fid&#x3D;qc.finfo_id) LEFT JOIN r_info rinfo on (rinfo.fqc_id&#x3D;qc.fid) where trim(BOTH &#39;&quot;&#39; FROM json_extract(esi.fdynamic_attribute,&#39;$.f31&#39;)) &#x3D;</span><br><span class="line">        &#39;&#39;&#39;</span><br><span class="line">        cursor.execute(sql+&quot;&#39;&quot;+runcode+&quot;&#39;;&quot;)</span><br><span class="line">        # print(sql+runcode+&quot;&#39;;&quot;)</span><br><span class="line">        # print(cursor.fetchall())</span><br><span class="line">        for i,item in enumerate(cursor.fetchall()):</span><br><span class="line">            self.data.loc[i+1] &#x3D; item ##插入行数据</span><br><span class="line">        df &#x3D; pd.DataFrame(self.data) #.to_excel(&quot;I:\\download\\zz.xlsx&quot;, sheet_name&#x3D;&quot;Sheet1&quot;, index&#x3D;False, header&#x3D;True)</span><br><span class="line">        self.setFormat(df)</span><br><span class="line"></span><br><span class="line">    def setFormat(self,df):</span><br><span class="line">        # df &#x3D; pd.DataFrame(self.data)</span><br><span class="line"></span><br><span class="line">        # Create a Pandas Excel writer using XlsxWriter as the engine.</span><br><span class="line">        writer &#x3D; pd.ExcelWriter(&#39;I:\\download\\zz.xlsx&#39;, engine&#x3D;&#39;xlsxwriter&#39;)</span><br><span class="line"></span><br><span class="line">        # Convert the dataframe to an XlsxWriter Excel object.</span><br><span class="line">        df.to_excel(writer, sheet_name&#x3D;&#39;Sheet1&#39;,index&#x3D;False)</span><br><span class="line"></span><br><span class="line">        # Get the xlsxwriter objects from the dataframe writer object.</span><br><span class="line">        workbook &#x3D; writer.book</span><br><span class="line">        worksheet &#x3D; writer.sheets[&#39;Sheet1&#39;]</span><br><span class="line"></span><br><span class="line">        # Add some cell formats.</span><br><span class="line">        format1 &#x3D; workbook.add_format(&#123;&quot;font_name&quot;: u&quot;微软雅黑&quot;&#125;)</span><br><span class="line"></span><br><span class="line">        # Set the column width and format.</span><br><span class="line">        worksheet.set_column(&#39;A:B&#39;, 18, format1)</span><br><span class="line">        worksheet.set_column(&#39;C:H&#39;, 20, format1)</span><br><span class="line">        df.to_excel(&quot;I:\\download\\zz.xlsx&quot;, sheet_name&#x3D;&quot;Sheet1&quot;, index&#x3D;False, header&#x3D;True)</span><br><span class="line">        writer.save()</span><br><span class="line"></span><br><span class="line">if __name__ &#x3D;&#x3D; &#39;__main__&#39;:</span><br><span class="line">    #创建一个空的Excel</span><br><span class="line">    path&#x3D;&quot;I:\\download\\zz.xlsx&quot;</span><br><span class="line">    df &#x3D; pd.DataFrame()</span><br><span class="line">    df.to_excel(&quot;I:\\download\\zz.xlsx&quot;)</span><br><span class="line">    </span><br><span class="line">    export&#x3D;Export()</span><br><span class="line">    export.getdata(&quot;F300000337&quot;)</span><br></pre></td></tr></table></figure><p>执行结果：<br><img src="46F2BCCE4AF84882BBC42681B673A797" alt="image"></p><blockquote><p><a href="https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html" target="_blank" rel="noopener">pandas官方文档</a><br><a href="https://www.pypandas.cn" target="_blank" rel="noopener">pandas中文文档</a><br><a href="https://blog.csdn.net/xufankang/article/details/83688379" target="_blank" rel="noopener">获取列标签参考博客</a><br><a href="https://www.cnblogs.com/SH170706/p/10568908.html" target="_blank" rel="noopener">pandas基础操作参考博客</a><br><a href="https://www.jianshu.com/p/7df2593a01ce" target="_blank" rel="noopener">excel插入列参考博客</a><br><a href="https://blog.csdn.net/qq_34377830/article/details/81872568" target="_blank" rel="noopener">excel插入列保存参考博客</a><br><a href="https://www.jb51.net/article/174537.htm" target="_blank" rel="noopener">操作列参考博客</a><br><a href="https://blog.csdn.net/guotong1988/article/details/80513879?utm_source=blogxgwz1" target="_blank" rel="noopener">左边多一列参考博客</a><br><a href="https://xlsxwriter.readthedocs.io/working_with_pandas.html" target="_blank" rel="noopener">设置列宽参考官方文档</a><br><a href="https://www.lizenghai.com/archives/37618.html" target="_blank" rel="noopener">设置列宽参考博客</a></p></blockquote>]]></content>
    
    <summary type="html">
    
      
      
        &lt;div class=&quot;toc&quot;&gt;

&lt;!-- toc --&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#1-an-zhuang&quot;&gt;1.安装&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#2-pandas-huo-qu-csv-excel-de-di-yi-xing-lie-bia
      
    
    </summary>
    
    
      <category term="Python库" scheme="https://babachuan.github.io/categories/Python%E5%BA%93/"/>
    
    
      <category term="Python" scheme="https://babachuan.github.io/tags/Python/"/>
    
  </entry>
  
</feed>
