<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>MySQL on 庞玉栋个人博客</title><link>https://pangyd.com/tags/mysql/</link><description>Recent content in MySQL on 庞玉栋个人博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 12 Sep 2017 19:33:30 +0800</lastBuildDate><atom:link href="https://pangyd.com/tags/mysql/index.xml" rel="self" type="application/rss+xml"/><item><title>【励志】写给立志做码农的大学生</title><link>https://pangyd.com/post/100/</link><pubDate>Tue, 12 Sep 2017 19:30:31 +0800</pubDate><guid>https://pangyd.com/post/100/</guid><description>&lt;p>确定方向&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>选择比努力更重要。&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 关于方向的选择其实越早确定越好，生活中我们要面临无数个选择，前几天看的一个黑客相关的美剧中有句台词说的不错：&lt;/p>&lt;p>life is binary.&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 生活就是二进制，一个个0101组成的。每一次抉择，选了就是1，不选就是0。另外也有一句话说：“人一生要面临很多选择，但是真正能决定你命运的只有几个”。没错其实就是这样。&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 如果你是计算机专业的学生，那么到底是考研还是就业就是首先要面临的问题。本文是面向确定了毕业要工作的大学生的，所以关于这个抉择，不再赘述。&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 就业的话，本文标题是码农，实际是指所有计算机相关的技术工种。包括开发、测试、运维等。&lt;/p>&lt;p>很多选择本身并没有对错或优劣，只有适合不适合。&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 不要滥用勤能补拙，这个词语一度被很多人奉为圭臬，但同时成了枷锁。我相信这个词，但是要考虑现状，要考虑投资回报率。你在自己并不擅长或不感兴趣的领域深耕了四年，最后不一定能获得多少成绩。当然如果你能在毕业后继续深耕几年或许是可以的，但是我希望每一位大学生在毕业的时候都能有一份好的工作，并且如果你并不喜欢某一领域的话，那么我相信你一定不会坚持下去。所以我们一定要找到适合自己的方向！&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 那么如何发现自己对什么感兴趣呢？我也不知道很好的办法，我只知道一个朴素的方法——尝试。趁着年轻，就要多尝试。千万不要大三了都还不知道自己兴趣在哪，想做什么，适合什么。所以大一大二努力去碰钉子吧。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>算法还是开发？&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 数据结构和算法很重要，无论是面试还是工作，无论你从事哪方面的技术。不过算法虽然重要，但并不适合每个人都花费大学全部的精力去钻研。&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 相信很多学校都有ACM竞赛相关的社团或组织。很不幸，我们学校没有，我大一的时候也花了很多精力刷题，但是硬件条件不太允许，氛围太缺乏。如果你觉得自己能够在ACM比赛中游刃有余，那么恭喜你，你可以一心一意搞算法。如果你觉得自己在这个过程中十分吃力，挫败感频生，那么也不要气馁，或许有另一条路是属于你的。选择开发，有算法功底深厚是很棒的事，但是仅仅只有算法同样是不够的，计算机海洋还有很多未知等着你探索。&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 算法岗包括数据挖掘、机器学习之类的（怎么样，高大上吧，反正我不懂）。要说明的是想做算法的同学最好选择读研继续深造，因为大企业在算法岗的招聘上对本科生是很不友好的。还是要申明一句，你做开发也不能忽视算法和数据结构，起码面试还是经常考的！记住一句：&lt;/p>&lt;p>算法功底好的人，运气都不会差。&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 对于本科生而言做开发还是相对容易的一条道路，不过开发的技术路线也是不胜枚举：前端、后台（PHP后台、Java后台等等）、移动端（安卓和iOS）、游戏开发、数据库（比如做DBA）……。这里我肯定不会去推荐你去学哪一种，我没有能力也不适合。只有你自己才能发现自己的兴趣以及好奇心之所在。&lt;/p>&lt;p>我能做的只是在浩如烟海的技术观点中，帮一个个本科生排疑解惑。&lt;/p>&lt;p>认识技术&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 关于技术，很多本科生都存在诸多误区。初学者总喜欢追随牛逼的技术，实在过于盲目，找准自己的定位最重要。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>误区1： 图形化的东西比非图形化东西更牛逼&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 多见于初学者，尤其是计算机专业新生（我大一的时候就是）。当时学校教了点C语言，一直都是控制台程序，面对黑窗口，我就各种百度看看怎么弄出图形化的东西，那时候才知道GUI这个缩写是啥意思（当初知道这个缩写的全称还小激动了一下下，果然我还是太年轻了），然后知道了WIN32、MFC这些名词。确实只能说是知道名词。当时对着视频教程做了计算器，就是用VC++拖拖控件，视频里的人敲一句代码，我就敲一句。后面虽然弄出来了，但是感觉自己什么都不懂，只是依样画葫芦。这时我才意识到，还有很多基础没有打牢。&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&amp;nbsp; &amp;nbsp; &amp;nbsp; 八卦一下，现在桌面客户端的开发工作并不多，所以大家谨慎选择这一技术方向。桌面端GUI技术一度火爆（MFC、Qt、WinForm、WPF、Swing……），但如今早已是互联网及移动互联网时代，所以大家真的要慎重选择。不过还是可以学习一下的，至少能加深你对编程语言以及设计模式的理解。&lt;/p></description></item><item><title>Java My SQL 数据库 用法操作代码</title><link>https://pangyd.com/post/74-java-my-sql/</link><pubDate>Tue, 22 Aug 2017 14:09:56 +0800</pubDate><guid>https://pangyd.com/post/74-java-my-sql/</guid><description>&lt;p>&lt;span>各数据库连接代码&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp;//Oracle8/8i/9i&lt;/span>&lt;span>数据库&lt;/span>&lt;span>(thin&lt;/span>&lt;span>模式&lt;/span>&lt;span>)&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp;&amp;nbsp;String&amp;nbsp;url="jdbc:&lt;a href="https://lib.csdn.net/base/oracle" class="replace_word" title="Oracle知识库" target="_blank">oracle&lt;/a>:thin:@localhost:1521:orcl";&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp;&amp;nbsp;String&amp;nbsp;user="scott";&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp;&amp;nbsp;String&amp;nbsp;password="tiger";&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp;&amp;nbsp;Connection&amp;nbsp;conn=DriverManager.getConnection(url,user,password);&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp;&amp;nbsp;//Sql&amp;nbsp;Server7.0/2000/2005/2008&lt;/span>&lt;span>数据库&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp;&amp;nbsp;String&amp;nbsp;url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp;&amp;nbsp;String&amp;nbsp;user="sa";&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp;&amp;nbsp;String&amp;nbsp;password="";&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp;&amp;nbsp;Connection&amp;nbsp;conn=DriverManager.getConnection(url,user,password);&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp;&amp;nbsp;//DB2&lt;/span>&lt;span>数据库&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp;&amp;nbsp;String&amp;nbsp;url="jdbc:db2://localhost:5000/sample";&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp;&amp;nbsp;String&amp;nbsp;user="amdin"&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp;&amp;nbsp;String&amp;nbsp;password=-"";&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp;&amp;nbsp;Connection&amp;nbsp;conn=DriverManager.getConnection(url,user,password);&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;span>//MySQL&lt;/span>&lt;span>数据库&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;span>String&amp;nbsp;url="jdbc:mysql://localhost:3306/testDB?user=root&amp;amp;password=root&amp;amp;useUnicode=true&amp;amp;characterEncoding=gb2312";&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;span>Connection&amp;nbsp;conn=DriverManager.getConnection(url);&amp;nbsp;&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;br>&lt;/span>&lt;/p>&lt;p>一下是进行增删改查的mysql代码&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>增：insert into user//表名(***//表头) values(****//增加的数据)";&lt;/p>&lt;p>改：update user//表名 set userName//表头 ='"+field2+"//修改的数据',passwork='"+field3+"',teacherID="+Integer.parseInt(field4)+" where userID="+Integer.parseInt(field1);&lt;/p>&lt;p>删：delete from user where userID="+Integer.parseInt(field1//字符串类型的要先转换成整型的);&lt;/p>&lt;p>查：select * from userID//查询表中的某个表头 order by User//&lt;a target="_self" href="https://github.com/As-before">表名&lt;/a>&lt;/p></description></item><item><title>JDBC数据库连接代码</title><link>https://pangyd.com/post/32-jdbc/</link><pubDate>Sat, 05 Aug 2017 17:02:45 +0800</pubDate><guid>https://pangyd.com/post/32-jdbc/</guid><description>&lt;p>&lt;/p>&lt;pre lay-lang="Java" class="layui-code" skin="notepad">package com.jnzyjsxy.common;
&lt;p>import java.sql.DriverManager;&lt;/p>
&lt;p>import java.sql.ResultSet;&lt;/p>
&lt;p>import com.mysql.jdbc.Connection;&lt;/p>
&lt;p>import com.mysql.jdbc.Statement;&lt;/p>
&lt;p>/*&lt;/p>
&lt;ul>
&lt;li>数据库连接类&lt;/li>
&lt;/ul>
&lt;p>*/&lt;/p>
&lt;p>public class Database {&lt;/p>
&lt;p>//创建成员变量用于存储数据库连接的字符串或结果&lt;/p>
&lt;p>//statement接口 用于执行静态sql语句 并返回它所生成的结果&lt;/p>
&lt;p>private Statement stmt=null;&lt;/p>
&lt;p>//结果集类&lt;/p>
&lt;p>ResultSet rs=null;&lt;/p>
&lt;p>//链接类&lt;/p>
&lt;p>private Connection conn=null;&lt;/p>
&lt;p>String sql;//存储sql语句&lt;/p>
&lt;p>//mysql数据连接字符串&lt;/p>
&lt;p>//&amp;ldquo;jdbc:mysql://localhost:3306/db_hrms&amp;rdquo;&lt;/p>
&lt;p>//数据库名称db_hrms&lt;/p>
&lt;p>//在数据库名称后，增加&amp;quot;?characterEncoding=GBK&amp;quot;，避免插入记录为乱码&lt;/p>
&lt;p>String strurl=&amp;ldquo;jdbc:mysql://localhost:3306/db_hrms?characterEncoding=GBK&amp;rdquo;;//主机地址&lt;/p>
&lt;p>String username=&amp;ldquo;root&amp;rdquo;;//用户名&lt;/p>
&lt;p>String password=&amp;ldquo;123456&amp;rdquo;;//密码&lt;/p>
&lt;p>//构造方法&lt;/p>
&lt;p>public Database(){&lt;/p>
&lt;p>}&lt;/p>
&lt;p>/*&lt;/p>
&lt;ul>
&lt;li>打开数据库连接&lt;/li>
&lt;/ul>
&lt;p>*/&lt;/p>
&lt;p>public void openConn() {&lt;/p>
&lt;p>try {&lt;/p>
&lt;p>Class.forName(&amp;ldquo;com.mysql.jdbc.Driver&amp;rdquo;);&lt;/p>
&lt;p>//DriverManager.getConnection启动器管理类的连接方法&lt;/p>
&lt;p>//创建数据库连接对象三个参数 初始化conn&lt;/p>
&lt;p>conn=(Connection) DriverManager.getConnection(strurl, username, password);&lt;/p>
&lt;p>System.out.println(&amp;ldquo;数据库连接成功&amp;rdquo;);&lt;/p>
&lt;p>} catch (Exception e) {&lt;/p>
&lt;p>// TODO: handle exception&lt;/p></description></item><item><title>关于Class.forName(“com.mysql.jdbc.Driver”)</title><link>https://pangyd.com/post/30-class-forname-com-mysql-jdbc-driver/</link><pubDate>Thu, 03 Aug 2017 17:14:46 +0800</pubDate><guid>https://pangyd.com/post/30-class-forname-com-mysql-jdbc-driver/</guid><description>&lt;p>传统的使用jdbc来访问数据库的流程为：&lt;br> Class.forName(“com.mysql.jdbc.Driver”);&lt;br> String url = “jdbc:mysql://localhost:3306/test?user=root&amp;amp;password=123456″;&lt;br> Connection con = DriverManager.getConnection(url);&lt;br> Statement statement = con.createStatement();&lt;/p>&lt;p>最开始使用的时候，不明白为什么首先要加载一个驱动类，之后就可以取得了Connection了，很好奇DriverManager是怎么获得那个驱动类的信息，后来看了下com.mysql.jdbc.Driver这个类的源代码，豁然开朗了。原来在com.mysql.jdbc.Driver类中有这么一段静态初始化代码：&lt;br> static {&lt;br> try {&lt;br> java.sql.DriverManager.registerDriver(new Driver());&lt;br> } catch (SQLException E) {&lt;br> throw new RuntimeException(“Can’t register driver!”);&lt;br> }&lt;br> }&lt;br> 也就是，在Class.forName加载完驱动类，开始执行静态初始化代码时，会自动新建一个Driver的对象，并调用DriverManager.registerDriver把自己注册到DriverManager中去。&lt;br>&lt;br>&lt;strong>ps1:&lt;/strong> Class.forName(String) 与ClassLoader.loadClass(String)的区别&lt;br> Class.forName(String): 加载类，并且执行类初始化；可以通过Class.forName(String, boolean, ClassLoader)第二个参数来仅仅加载类不执行初始化；&lt;br> ClassLoader.loadClass(String): 仅仅加载类，不执行类初始化；&lt;/p>&lt;p>&lt;strong>ps2:&lt;/strong> 有时会看到这种用法：&lt;br> Class.forName(“com.mysql.jdbc.Driver”).newInstance();&lt;br> 这是没有必要的，正如前述，静态初始化已经new了一个Driver的对象，注册到DriverManager中去，在此再建立一个Driver对象则是完全没有必要的，浪费空间。&lt;/p>&lt;p>&lt;strong>ps3:&lt;/strong> 结合ps1，Class.forName(“com.mysql.jdbc.Driver”);相当于：&lt;br> ClassLoader loader = Thread.currentThread().getContextClassLoader();&lt;br> Class cls = loader.loadClass(“com.mysql.jdbc.Driver”);&lt;br> cls.newInstance();&lt;br> 这种方法的问题同ps2, 浪费了一个Driver对象；&lt;/p>&lt;p>&lt;strong>ps4:&lt;/strong> 在java 6中，引入了service provider的概念，即可以在配置文件中配置service（可能是一个interface或者abstract class）的provider（即service的实现类）。配置路径是：/META-INF/services/下面。详细信息见：https://docs.oracle.com/javase/6/docs/technotes/guides/jar/jar.html#Service%20Provider&lt;br> 而java.sql.DriverManager也添加了对此的支持，因此，在JDK6中，DriverManager的查找Driver的范围为：&lt;br> 1）system property “jdbc.drivers” 中配置的Driver值；&lt;br> 2）用户调用Class.forName()注册的Driver&lt;br> 3）service provider配置文件java.sql.Driver中配置的Driver值。&lt;br> 因此，在jdk6中，其实是可以不用调用Class.forName来加载mysql驱动的，因为mysql的驱动程序jar包中已经包含了java.sql.Driver配置文件，并在文件中添加了com.mysql.jdbc.Driver.但在JDK6之前版本，还是要调用这个方法。&lt;/p></description></item></channel></rss>