day06_JDBC学习笔记

Posted haha

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day06_JDBC学习笔记相关的知识,希望对你有一定的参考价值。

一、JDBC概述

  为什么要使用JDBC

  JDBC:Java DataBase Connectivity,是SUN公司提供的一套操作数据库的标准规范(技术)。

  JDBC数据库驱动的关系:接口实现的关系。

    

  JDBC规范(掌握四个核心对象):

    DriverManager:用于注册驱动(创建连接对象)。 java.sql.DriverManager;

    Connection接口:表示与数据库创建的连接 。java.sql.Connection;

    Statement接口:操作数据库sql语句的对象,并返回相应结果的对象。 java.sql.Statement;

      preparedStatement接口:预编译对象,是Statement对象的子类。用于解决sql的注入问题。实际用的是这个类。java.sql.PreparedStatement;

    ResultSet接口:结果集或一张虚拟表(客户端存表数据的对象)。 java.sql.ResultSet;

    

  开发一个JDBC程序的准备工作:

    > JDBC规范在哪里:

      JDK中:

      java.sql.*;  // jdk自身带的包

      javax.sql.*; // 扩展包(企业级开发)

    > 数据库厂商提供的驱动:jar文件 (也即具体的实现)

     *.jar

    

二、开发一个JDBC程序(重要)

  使用JDBC技术,通过java代码实现查询数据库中的数据并显示在java的控制台中。

  1、先创建数据库表,并向表中添加测试数据。

  create database day06;
  use day06;
 
  create table users (
      id int primary key auto_increment,
      name varchar(40),
      password varchar(40),
      email varchar(60),
      birthday date
  ) character set utf8 collate utf8_general_ci;
 
  insert into users(name, password, email, birthday) values(\'zs\', \'123456\', \'zs@sina.com\', \'1980-12-04\');
  insert into users(name, password, email, birthday) values(\'lisi\', \'123456\', \'lisi@sina.com\', \'1981-12-04\');
  insert into users(name, password, email, birthday) values(\'wangwu\', \'123456\', \'wangwu@sina.com\', \'1979-12-04\');
    

  2、创建Java Project项目,添加数据库驱动(xxx.jar)。

  3、实现JDBC操作。

    

三、JDBC常用的类和接口详解

1、java.sql.Drivermanager类:注册驱动、建立连接

  a、注册驱动

    DriverManager.deregisterDriver(new com.mysql.jdbc.Driver()); // 不建议使用

    原因有2个:

      > 导致驱动被注册2次。

      > 强烈依赖数据库的驱动jar包  (若把奶瓶的Build Path给Remove掉,代码就会报错,就能看到效果)

    解决办法:

      Class.forName("com.mysql.jdbc.Driver");  // 把奶瓶的Build Path给Remove掉,代码也不会报错了

      用到反射机制的知识:靠类的全路径来加载,解耦合了,不依赖数据库的驱动jar包了,以后会把上面的字符串放在配置文件里,更灵活了,便于后期维护

  b、与数据库建立连接

    DriverManager类的静态方法:

      public static Connection getConnection(String url, String user, String password) 试图建立到给定数据库 URL 的连接

      DriverManager.getConnection("jdbc:mysql://localhost:3306/day06""root""root");

      URL:是SUN公司与数据库厂商之间的一种协议。

      jdbc:mysql://localhost:3306/day06

      协议 子协议     IP   数据库端口号 数据库名称

      mysql:jdbc:mysql://localhost:3306/day14 或者 

      jdbc:mysql:///day14(默认连接本机的数据库)

 

      oracle:jdbc:oracle:thin:@localhost:1521:sid    瘦客户端,比如:玩页游协议   

      子协议 子子协议            IP     数据库端口号 数据库名称

      oracle:jdbc:oracle:thick:@localhost:1521:sid    胖客户端,比如:LOL、魔兽世界(需要下载软件)

    与数据库建立连接的方式

    第一种:

       // public static Connection getConnection(String url, String user, String password)

       Connection conn =  DriverManager.getConnection("jdbc:mysql://localhost:3306/day06""root""root");

 

    第二种:

      // public static Connection getConnection(String url, Properties info)

      Properties info = new Properties(); // 要参考数据库文档

       info.setProperty("user""root");

      info.setProperty("password""root");

       Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day06"info);

 

    第三种:

      // public static Connection getConnection(String url)

      Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day06?user=root&password=root");

      // 模拟表单form提交的两种方式:GET和POST

    实际开发常用第一种。

 

  扩展内容:演示3个案例的话需要写3个main方法,所以有了快速测试的方法 ==> junit技术

    package com.itheima.junitdemo;
    public class Calc {
        public int add(int aint b) {
            return a + b;
        }
        public double div(double aint b) {
            return a / b;
        }

    }

    -------------------------------------------

    package com.itheima.junitdemo;
    import org.junit.Assert;
    import org.junit.Test;
    // 注:测试的方法有要求:不能有返回值,不能有参数。
    public class TestCalc {
        @Test
        public void test1(){
            Calc c = new Calc();
            Assert.assertEquals(8, c.add(3, 5)); // assert 断言
        }
        @Test
        public void test2(){
            Calc c = new Calc();
            Assert.assertEquals(3, c.div(10, 3),0.4);
        }
    }

2、java.sql.Connection接口:一个连接(与数据库连接的一座桥梁)

  该接口的实现在数据库驱动jar包中所有与数据库交互都是基于连接对象的。

  // 创建执行sql语句的对象Satement(接口)
  // Connection(接口)的方法:Statement createStatement()
  Statement stmt = conn.createStatement();

3、java.sql.Statement接口:操作sql语句,并返回相应结果的对象(小货车)

  该接口的实现在数据库驱动jar包中。用于执行静态 SQL 语句返回它所生成结果的对象

  // 执行sql语句,该语句返回单个 ResultSet 结果集对象。 
  // Statement(接口)的方法:ResultSet executeQuery(String sql)
  // 注意;该方法只能执行select语句。
  ResultSet rs = stmt.executeQuery("select * from users");

 

  // Statement(接口)的方法:int executeUpdate(String sql)
  // 根据执行的 DML(insert update delete)语句,返回受影响的行数。
  // 服务器端叫法:insert、delete、update、select (增删改查)
   // 客户端的叫法:create、read、update、delete (CRUD)(增删改查)
  int i = stmt.executeUpdate("INSERT INTO users VALUES (4, \'tom\', \'123\',\'tom@163.com\', \'2015-09-28\')");
  int i = stmt.executeUpdate("UPDATE users SET NAME = \'jerry\', PASSWORD = \'333\', email = \'jerry@163.com\' WHERE id = 4");
  int i = stmt.executeUpdate("DELETE FROM users WHERE id = 4");