程序是通过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设计模式——7.备忘录模式

    js设计模式——7.备忘录模式 /*js设计模式——备忘录模式*/ // 备忘类 class Memento { constructor(content) { this.content = conte ...

  2. mac os 下安装mysql

    在 http://dev.mysql.com/downloads/mysql/ 选择下载mysql 注册并选择相应的版本后,得到下载链接:: wget http://dev.mysql.com/get ...

  3. python 多设备同时安装app包

    python  多设备同时安装app包 上代码 #!/usr/bin/env python # -*- encoding: utf-8 -*- import os import time from m ...

  4. 9. DMA

    9.1 介绍 Direct memory access(DMA) 直接存储器访问. 这两个DMA控制器总共有16个流(每个控制器8个),每个流用于管理来自一个或多个外围设备的内存访问请求.每个流总共可 ...

  5. Linux启动过程的C语言代码分析

    1. main函数 参见上方http://www.cnblogs.com/long123king/p/3543872.html,代码跳转到main函数. arch/x86/boot/main.c 1: ...

  6. 高效IO之Java IO体系(一)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 个人觉得可以用“字节流操作类和字符流操作类组成了Java IO体系”来高度概括J ...

  7. 关于Ms Sql server 表列等是否存在

    select object_id('名称') ,object_id('名称','类型') 1. 等价于 select * from sys.objects where name ='名称' selec ...

  8. what codes does sudo command do in Linux?

    sometime, to make your change of configuration file be effective to web application, we have to rest ...

  9. etc/profile /etc/bashrc ~/.bash_profile ~/.bashrc等配置文件区别

    什么是交互式shell和非交互式shell,什么是login shell 和non-login shell. 交互式模式:就是shell等待你的输入,并且执行你提交的命令.这种模式被称作交互式是因为s ...

  10. Spark Streaming与Storm的对比