黑马程序员技术交流社区

标题: 【广州校区】【原创】JDBC基础 [打印本页]

作者: yuhaohong    时间: 2018-1-3 11:35
标题: 【广州校区】【原创】JDBC基础
myql概述
        在java学习中,最常用的数据库为mysql,mysql5.5之前因为免费所以在很多程序员学习或者公司项目中使用。
        我们在电脑上安装了mysql软件,当我们启动mysql的时候,我们的电脑就相当于一台小型的mysql服务器,只是这台服务器比较小,只能服务器我们自身学习或者测试
        在mysql中通过简单的指令就可以完成数据的增删改查操作,作为程序员的我们,需要解放我们的双手,提高效率,我们需要用程序来帮我我们进行数据的增删改查的操作。
        毕竟身为一名java程序员,我们肯定是用java代码来操作数据库
       
[Java] 纯文本查看 复制代码
public static void main(String[] args) {
        Class.forName("com.mysql.jdbk.Driver"); //加载驱动
        DriverManager.reisterDriver(new Driver());// 注册驱动(可以省略)
        Connection conn = DriverManager.getConnection(String url, String userName, String password);
          //jdbc:mysql://localhost:3306/myDataBaseName
          Statement stmt = conn.createStatement();//获取数据库操作对象一
          PrepareStatement pstmt = conn.prepareStatement(String sql);//获取数据库操作对象二
}

          我们看到,第一句代码表示通过反射把一个Driver类加载进我们的内存,这句话的意思是说:Hello,我现在要操作mysql数据库了,mysql厂商请赐我一个帮我连接到你数据库的工具
        至于为什么需要这样子操作,是因为java为了我们操作不同数据库都使用相同的方法,减少我们程序员的学习成本,所以规定了JDBC接口
        就好比如,现在有Oracle,MySQL等几个数据了,每个数据库厂商都开发自己一套连接和操作数据库的工具(驱动),今天你用Oracle数据库记住一套操作流程,某天公司换MySQL数据库了,又要用到MySQL数据库的操作驱动
        这就显得很尴尬,同样的操作,却要写不一样的代码,于是聪明的人就想,反正数据库无非就是增删改查(CURD),我就定义一套接口,定义一系列方法,数据库厂商根据我这套接口来实现自己的访问操作,这就很好的解决了操作不同数据库实现代码统一的问题了。
        毕竟java程序员人数多,市场大,数据库厂商为了占领多一份市场,也就乖乖的跟着java的接口规范来实现自己的驱动了
        在第二行,我们通过Java的驱动管理员来注册驱动,类加载进来了,放入驱动管理者让它来帮我们创建连接,但是如果我们打开驱动的源码,会发现,在我们通过反射加载驱动类的,在代码里有一个静态代码块,里面有帮我们注册驱动的代码,即第二行代码在驱动包里已经帮我们写了,以后我们可以省略,相当于驱动类一加载就立即自动帮我们注册好了
        既然这样子,驱动加载好了,也注册了,接下来就是连接过去数据库了,第三行代码就是这个过程:
        url中的jdbc表示:我要开始连数据库了,连谁呢?我们用mysql,所以就子协议就写mysql。然后ok,那我们去哪里找我们的数据库呢?接下来就是写IP和端口,我们程序就通过IP找到服务器地址,找到后通过端口找到服务器软件,如果都找到了,那就最后通过数据库名找到我们需要的数据库进行操作(毕竟一个数据库软件里可以存放不同项目的数据)
        接下来,获取到连接了,就可以多数据库进行操作了,数据库操作对象是一个Statement的实现类,也是由数据库厂商实现的,每个数据库存储数据的方式都不一样,这也很好理解,为什么是用他们的实现类,或者我们也可以使用预编译的Statement来操作数据库,如最后一样代码。
        
[AppleScript] 纯文本查看 复制代码
public static void main(String[] args) {
          Connection conn = null;
          Statement stmt = null;
          ResultSet rs = null;
          try{
            Class.forName("com.mysql.jdbc.Driver");
              conn = DriverManager.getConnection("jdbc:mysql:///myDataBaseName", "root", "root");
              stmt = conn.createStatement();
              stmt.executeUpdate("update table_name set xxx = yyy where zzz");
              rs = stmt.executeQuery("select * from table");
        while(rs.next()) {
          //.....
        }
          }catch(Exception e) {}finally {
            if(stmt != null) stmt.close();
              if(conn != null) conn.close();
          }
}

        获取到Statement后,我们就可以执行CURD操作了,一般DML语句,即增删改都用update来执行,返回的是影响的行数,DQL语句即查询语句用query来执行,返回一个resultSet对象,通过这个对象获取返回的数据
       ResultSet对象可以通过遍历来获取每一行的数据,调用一次next方法指针就往下移一行,然后再每一行里调用getXXX方法通过索引或者列明获取执行的数据
       最后,连接了数据库就好像给好朋友打电话一样,打完了要挂电话,我们也要断开连接,不然会一致消耗我们的资源(电话费),所以再finally里执行关闭连接



作者: 吉山小学生    时间: 2018-1-6 14:07
沙发!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2