程序是通过DriverManager注册驱动,所以加载之后可以直接使用DriverMannager
mysql中的多态:
不仅是赋值的时候使用了多态,返回的时候都是返回的借口(不是返回的子类对象),所以如果不使用多态需要强转通过Java代码去操作数据库

  JDBC ----- Java 数据库 连接 JDBC是java提供的数据库连接规范
  J ----- Java
  DB ----- DataBase
  C ----- Connectivity
使用JDBC
A.JDK 本身没有实现数据库连接的功能
  第三方实现了MySQL与Java的连接,并且打包成jar包
  我们要下载jar包,并且将jar包导入到当前项目

B.获取连接   数据库连接的原理就是一个Socket
  在Eclipse的Java程序与MySQL之间创建一个管道

  注册驱动:Class.forName("com.mycql.jdbc.Driver") 最常用的方法
  获得连接:
      Connection con = DriverManager.getConnection(url,"账号","密码")
      这是个面向接口的编程,返回的是java中的父类Connection,创建的是mysql中实现类的对象
      url 作用:用来定位数据库
      jdbc:mysql://localhost:3306/database
      jdbc:mysql:   mysql数据库协议
      localhost     IP地址,定位一台电脑
      3306        端口号:定位MySQL程序
      database     定位MySQL的一个数据库
C.在连接上创建代理对象
  Statement sta = con.createStatement();
    编写SQL语句并执行
    sta.executeXxx("SQL语句")
    处理执行结果
D.释放资源 程序与外部交互都需要关闭资源,关闭资源之后数据库的数据才能进行其它操作
  关闭顺序,后创建的先关闭
  rs.close()
  sta.close()
  con.close()

加载驱动的方式 将驱动类加载进内存
  1.Class.forName("驱动名")
  2.new Driver() 需要导包
  3.DriverManager.registerDriver(new Driver()) 需要导包
  4.System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver")

  2.3两种方式不常用
    原因1:
      类加载时,会自己使用方式3进行注册(Driver类中的静态代码块)
      方式2额外创建了一个无用对象
      方式3重复加载驱动
    原因2:
      常见的情况是,开发使用MySQL数据库,部署使用Oracle数据库
      如果是方式2.3,需要频繁改变导入的包名
      方式1可以将驱动名配置进配置文件 //返回的都是java中本身的接口规范,所以不需要导包

Statement 执行代理对象的使用(用于代理固定了的SQL语句)
  A.ResultSet rs = Statement.executeQuery("select * form ...") 执行查询的语句,返回一个查询到的结果集
    ResultSet 封装了查询到的若干条数据
    
用法:
    while(rs.next()){
      rs.getObject("字段名");
      rs.getObject(int indext); 字段索引,从第一行第一列开始
    }
      注意:Java中的索引一般从0开始,但是JDBC中的索引从1开始
B.  int line = Statement.executeUpdate("insert into 表名 字段=值 where...")
      用于执行增删改操作的SQL语句,返回的是此操作改变了多少条数据
C.  execute方法可以区别是查询还是修改语句
      返回值是true则是select语句,否则是修改语句

PrepareStatement 是Statement的子类
  SQL语句的预处理对象
    在SQL语句中可以用 ? 作为占位符,之后补齐(站位符只能用于属性值的地方,会逐个分析传入字符,转义非法字符,去掉最外层单引号)
  1.获取执行对象
    PrepareStatement pst = con.prepareStatement(SQL语句)
  2.补齐占位符
    pst.setObject(int indext, value)
    Object的类型要和value的类型保持一致
  3.执行SQL语句
    pst.executeQuery()
    pst.executeUpdate()

  优点:
    A.功能更强大,比如可以插入一些特殊字符
    B.执行效率更高,因此称之为预定义的Statement (在获得连接的时候就已经准备执行了)

注册驱动,获得连接,关闭资源代码重复,封装
JDBCUtils
  public class JDBCUtils {
    //注册驱动只需要注册一次
      static {
        Class.forName("com.mysql.jdbc.Driver")
      }
    //封装获得连接
      public static Connection getCon(){
        Connection con = null;
          try {
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/database",账户,密码);
          } catch (Exception e) {
          //发生了异常一定让程序停止,因为没有获得连接(抛运行时异常结束java虚拟机)
            e.printStackTrace();
            throw new RuntimeException();
          }
        return con;
      }

      public static void close(ResultSet rs,Statement sta,Connection con){
      //要打印自定义信息,在异常的构造方法中的有参构造,创建异常对象的时候就给出信息,catch到处理的时候打印
      //判断是不是不等于空,避免空指针,没有对象的时候不需要关闭,一定要释放资源,不然会影响数据的操作
        if(rs != null){
          try{
            rs.close();
          } catch (Exception e) {
            System.out.println(e.getMessage);
          }
        }
        sta.close();
        con.close();   //同理try\catch关闭资源
       }

    }

JDK 中的 JDBC 设计
  A:JDBC 中大量的使用了多态
    全是接口,就是定义了规则,供各种数据库实现此规则,但都是接口层次,不用改源码
    Connection 使用
    Statement 使用
    ResultSet 使用
  B:真正的实现全在各种数据库自己封装的jar包中
    不使用多态的时候:
      1.程序一样运行
      2.缺点:更换jar包是,所有对应的导包实现都得修改
  
    多态体现在Jar包更换上,使用了多态,实现了一种可插拔设计
接口相当于是一种规范,jar包中类实现了接口,遵守规范完成某种操作

mysql的JDBC连接的更多相关文章

  1. 【MySQL】JDBC连接MySQL的一些问题以及解决办法

    [MySQL]JDBC连接MySQL的一些问题以及解决办法 http://blog.csdn.net/baofeidyz/article/details/52017047

  2. Oracle Mysql的jdbc连接

    Oracle和MySql的jdbc或连接池中的连接,写下来以便随时参考 Oracle: driverClassName=oracle.jdbc.driver.OracleDriver url=jdbc ...

  3. MySQL分布式jdbc连接

    参考文档: https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-multi-host-connections.html 服务器故障转移 连 ...

  4. 【添加最新版本的mysql的jdbc连接jar包】java.math.BigInteger cannot be cast to java.lang.Long异常

    [问题描述] 从我的电脑把项目拷贝到guo小中的win8电脑,but出现了那个错误,估计他的mysql是最新版本的. [如何下载连接jar包] 链接:https://pan.baidu.com/s/1 ...

  5. Java使用JDBC连接MySQL数据库

    1.引用 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写 ...

  6. JDBC连接MySQL与Oracle

    JDBC连接MySQL .JDBC连接Oracle (跳转) JDBC连接MySQL import org.junit.Test; import java.sql.*; /** * JDBC连接MyS ...

  7. mysql中,由于JDBC连接限制了最大包长度1024B,即1KB,报错“max_allowed_packet' ”

    报错:org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [INS ...

  8. JDBC连接MySQL数据库代码模板

    下面这个例子是最简单的JDBC连接MySQL数据库的例子. 一般步骤: 1.注册驱动: 2.建立连接: 3.创建语句: 4.处理结果: 5.释放资源. 注意: 1.软件开发环境:MyEclipse 8 ...

  9. JDBC连接MySQL 方法 实例及资料收集

    JDBC连接MySQL 方法 实例及资料收集 准备工作 首先,安装MySQL,配置用户名和密码,创建数据库. 可参见之前的文章: http://www.cnblogs.com/mengdd/p/315 ...

随机推荐

  1. js-统计中文,英文,字符的个数

    function getByteLen(val) { ; ; i < val.length; i++) { var a = val.charAt(i); if (a.match(/[^\x00- ...

  2. php的socket编程(socket关键几个函数)

    php的socket编程(socket关键几个函数) 一.总结 一句话总结: socket_create.socket_connect.socket_bind.socket_listen.socket ...

  3. 安装nodejs nvm

    安装nodejs sudo apt-get install nodejs sudo apt-get install npm 安装nvm https://www.runoob.com/w3cnote/n ...

  4. Dubbo入门到精通学习笔记(十六):Keepalived+Nginx实现高可用Web负载均衡

    文章目录 Keepalived+Nginx实现高可用Web负载均衡 Keepalived+Nginx实现高可用Web负载均衡 高可用架构篇 Keepalived + Nginx 实现高可用 Web 负 ...

  5. redis集群创建时报错:Sorry, can't connect to node

    1.redis集群创建时报错:Sorry, can't connect to node ip,端口等都配置正确的话,还需要将redis.conf文件中的密码注释掉    # requirepass 1 ...

  6. 结合Poi实现可读取Excel的文件选择对话框

    第一步:ApachePoi的jar包导全,不全会出现异常. 第二步:写就完事了:此例为读取特定模板的excel,仅供参考,根据实际需求改写. package 自建包; import java.awt. ...

  7. 基于角色访问控制的OA系统的设计与实现

    摘要:随着电子政务的快速发展和全面普及,办公自动化(OA)系统的安全性显得越来越重要.对基于Web 的B/S 结构的OA 系统结构和安全需求进行了分析,为了增强用户身份鉴别和授权控制的安全性,分析了基 ...

  8. 从身份证号提取生日并更新到生日字段中的SQL语句

    1:根据身份证号 更新 生日字段 SQL update 学生信息 ,)+,)+,) 2:根据身份证号 更新 性别字段 SQL update 学生信息 set 性别='男' and substring( ...

  9. ARM 汇编 数据处理指令

    一. 如何把数据放到寄存器中 1. 数据搬移指令 mov  , mvn 1)  指令格式:<opcode><cond>{s}   Rd,  operand     <操作 ...

  10. 2.Struts2配置文件

    1.配置文件的加载顺序 0. 需要掌握         * 加载了哪些个配置文件(重点的)         * 配置文件的名称是什么         * 配置文件的位置         * 配置文件的 ...