zoukankan      html  css  js  c++  java
  • MySQL学习笔记(模块二)

    JDBC

    JDBC就是由sun公司定义的一套操作所有关系型数据库的规则(接口),而数据库厂商需要实现这套接口,提供数据库驱动jar包, 我们可以使用这套接口编程,真正执行的代码是对应驱动包中的实现类。
    注册驱动
    从 JDBC3 开始,目前已经普遍使用的版本。可以不用注册驱动而直接使用。 Class.forName 这句话可以省略。

     获得连接

    Connection 接口,代表一个连接对象 ,具体的实现类由数据库的厂商实现使用 DriverManager类的静态方法,getConnection可以获取数据库的连接
    获取语句执行平台
    通过Connection 的 createStatement方法 获取sql语句执行对象
    Statement : 代表一条语句对象,用于发送 SQL 语句给服务器,用于执行静态 SQL 语句并返回它所生成结果
    ResultSet接口
    释放资源
    1) 需要释放的对象:ResultSet 结果集,Statement 语句,Connection 连接
    2) 释放原则:先开的后关,后开的先关。ResultSet ==> Statement ==> Connection
    3) 放在哪个代码块中:fifinally 块

    步骤总结

    1. 获取驱动(可以省略)
    2. 获取连接
    3. 获取Statement对象
    4. 处理结果集(只在查询时处理)
    5. 释放资源
    解决插入中文乱码问题
    jdbc:mysql://localhost:3306/db4?characterEncoding=UTF-8
    characterEncoding=UTF-8 指定字符的编码、解码格式。

    SQL注入

     我们让用户输入的密码和 SQL 语句进行字符串拼接。用户输入的内容作为了 SQL 语句语法的一部分,改变了 原有

     SQL 真正的意义,以上问题称为 SQL 注入 .

    PreparedStatement 接口介绍
    • PreparedStatement 是 Statement 接口的子接口,继承于父接口中所有的方法。它是一个预编译的 SQL 语句对象.
    • 预编译:  是指SQL 语句被预编译,并存储在 PreparedStatement 对象中。然后可以使用此对象多次高效地执行该语句。
    PreparedStatement 特点
    因为有预先编译的功能,提高 SQL 的执行效率。
    可以有效的防止 SQL 注入的问题,安全性更高
    Statement 与 PreparedStatement的区别?
    1. Statement用于执行静态SQL语句,在执行时,必须指定一个事先准备好的SQL语句。
    2. PrepareStatement是预编译的SQL语句对象,语句中可以包含动态参数“?”,在执行时可以为“?”动态设置参数值。
    3. PrepareStatement可以减少编译次数提高数据库性能。

    连接池

     实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们采用连接池技术,来共享连接Connection。这样我们就不需要每次都创建连接、释放连接了,这些操作都交给了连接池.

    Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池!

    连接池的好处

     用池来管理Connection,这样可以重复使用Connection。 当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。

    DBCP连接池

     DBCP也是一个开源的连接池,是Apache成员之一,在企业开发中也比较常见,tomcat内置的连接池。

    C3P0连接池

     C3P0是一个开源的JDBC连接池,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、Spring等。

    Druid连接池
    Druid(德鲁伊)是阿里巴巴开发的号称为监控而生的数据库连接池,Druid是目前最好的数据库连接池。在功能、性能、扩展性方面,都超过其他数据库连接池,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况。

    Druid获取连接池

     通过工厂来来获取 DruidDataSourceFactory类的createDataSource方法createDataSource(Properties p) 方法参数可以是一个属性集对象

    public static DataSource dataSource;
        //2.静态代码块
        static{
            try {
                //3.创建属性集对象
                Properties p = new Properties();
                // 4.加载配置文件 Druid 连接池不能够主动加载配置文件 ,需要指定文件
                InputStream inputStream = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties");
                // 5. 使用Properties对象的 load方法 从字节流中读取配置信息
                p.load(inputStream);
                // 6. 通过工厂类获取连接池对象
                dataSource = DruidDataSourceFactory.createDataSource(p); }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }

     DBUtils工具类

    使用JDBC我们发现冗余的代码太多了,为了简化开发 我们选择使用 DbUtils
    Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。
    Dbutils核心功能介绍
    1. QueryRunner 中提供对sql语句操作的API.
    2. ResultSetHandler接口,用于定义select操作后,怎样封装结果集.
    3. DbUtils类,他就是一个工具类,定义了关闭资源与事务处理相关方法.
    批处理(batch) 操作数据库
    批处理指的是一次操作中执行多条SQL语句,批处理相比于一次一次执行效率会提高很多。
    当向数据库中添加大量的数据时,需要用到批处理。

     打开批处理模式

     rewriteBatchedStatements=true

    例如: url=jdbc:mysql://127.0.0.1:3306/db5?characterEncoding=UTF-8&rewriteBatchedStatements=true
    MySql元数据
    查询结果信息: UPDATE 或 DELETE语句 受影响的记录数。
    数据库和数据表的信息: 包含了数据库及数据表的结构信息。
    MySQL服务器信息: 包含了数据库服务器的当前状态,版本号等。

    元数据相关sql命令

     select version(); 获取mysql服务器的版本信息

    show status; 查看服务器的状态信息
    show columns from table_name; 显示表的字段信息等,和desc table_name一样
    show index from table_name; 显示数据表的详细索引信息,包括PRIMARY KEY(主键)
    show databases:列出所有数据库
    show tables : 显示当前数据库的所有表
    select database(): 获取当前的数据库名

    使用JDBC获取元数据

     获取元数据对象的方法 : getMetaData ()

    connection 连接对象, 调用 getMetaData () 方法,获取的是DatabaseMetaData 数据库元数据对象
    PrepareStatement 预处理对象调用 getMetaData () , 获取的是ResultSetMetaData , 结果集元数据对象
    DatabaseMetaData的常用方法

    ResultSetMetaData的常用方法

     XML能做些什么

    元素的命名规则

     1. 不能使用空格,不能使用冒号

    2. xml 标签名称区分大小写
    3. XML 必须有且只有一个根元素

    属性

     1. 属性是元素的一部分,它必须出现在元素的开始标签中

    2. 属性的定义格式:属性名=属性值,其中属性值必须使用单引或双引
    3. 一个元素可以有0~N个属性,但一个元素中不能出现同名属性
    4. 属性名不能使用空格、冒号等特殊字符,且必须以字母开头
    常见的xml约束
    DTD
    Schema

    XML解析方式

     DOM:要求解析器把整个XML文档装载到内存,并解析成一个Document对象。

      优点:元素与元素之间保留结构关系,故可以进行增删改查操作。
      缺点:XML文档过大,可能出现内存溢出显现。
    SAX:是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。并以事件驱动的方式进行具体解析,每执行一行,都将触发对应的事件。(了解)
      优点:占用内存少 处理速度快,可以处理大文件
      缺点:只能读,逐行后将释放资源。
    XML常见的解析器
    • JAXP:sun公司提供的解析器,支持DOM和SAX两种思想
    • DOM4J:一款非常优秀的解析器 , Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。
    • 它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。
    • Jsoup:jsoup 是一款Java 的HTML解析器 ,也可以解析XML
    • PULL:Android内置的XML解析方式,类似SAX。
    SaxReader常用API
    SaxReader对象
      read(…) 加载执行xml文档
    Document对象
      getRootElement() 获得根元素
    Element对象
      elements(…) 获得指定名称的所有子元素。可以不指定名称
      element(…) 获得指定名称的第一个子元素。可以不指定名称
      getName() 获得当前元素的元素名
      attributeValue(…) 获得指定属性名的属性值
      elementText(…) 获得指定名称子元素的文本值
      getText() 获得当前元素的文本内容
    xpath方式读取xml
    XPath 是一门在 XML 文档中查找信息的语言。 可以是使用xpath查找xml中的内容。XPath 的好处
    由于DOM4J在解析XML时只能一层一层解析,所以当XML文件层数过多时使用会很不方便,结合XPATH就可以直接获取到某个元素

     

    错题集

  • 相关阅读:
    mysql-proxy使用中的问题
    iOS中利用CoreTelephony获取用户当前网络状态(判断2G,3G,4G)
    Django连接MySQL出错
    前后端分离
    django 安装指定版本
    问题
    算法面试
    记录docker for windows 时候的错误
    Django项目部署
    git 上传至github
  • 原文地址:https://www.cnblogs.com/zhf123/p/14260207.html
Copyright © 2011-2022 走看看