A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 庞帅 初级黑马   /  2018-5-21 14:53  /  498 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

JDBC

JDBC:是Java操作数据库的API -(是最底层的API)
MySQL加载驱动的固定写法:
执行SQL语句:
Connection: conn
Statement stat = conn.createStatement();实际不用
PrepareStatement pa = conn.prepareStatement(“select * from user”);
Statement 是PrepareStatement 的父接口
区别:PrepareStatement 有预编译
Statement 有漏洞
PrepareStatement :ps
执行查询:
ResultSet rs = ps.executeQuery();
执行增,删,改:
int rs = ps.executeUpate(String sql);
遍历输出结果:
ResultSet rs
While(rs.next()){
Rs.getxxx(String columnName);
columnName默认字段名称,取了别名,使用别名
}
资源释放:
放到finally里面
标准代码:
if(rs !=null){
                                try {
                                        rs.close();
                                } catch (SQLException e) {
                                        e.printStackTrace();
                                }
                               
                                rs = null;  ==>尽快回收
                        }
                       
                        if(statement !=null){
                                try {
                                        statement.close();
                                } catch (SQLException e) {
                                        e.printStackTrace();
                                }
                               
                                statement = null;
                        }
                       
                       
                        if(conn !=null){
                                try {
                                        conn.close();
                                } catch (SQLException e) {
                                        e.printStackTrace();
                                }
                               
                                conn = null;
                        }
JDBC的工具类的抽取:
对扩展是开放的
对修改源码是关闭
JDBC的配置信息提取到配置文件
模糊查询:
Select * from user where nickname like ?
Pstmt.setString(1,%小%);
批处理:
批量插入记录:
默认情况下MySQL批处理没有开启的,需要在url后面拼接一个参数即可


JDBC高级
JDBC事务:
事务指的是逻辑上的一组操作,组成这组操作各个逻辑单元要么全都成功,要么全都失败。
事务管理的核心步骤:
开启事务:
conn.setAutoCommit()
业务逻辑的操作
提交事务:
conn.commit()
一旦有异常:回滚事务
conn.rollback()
事务管理的核心思想:
业务逻辑的操作要使用同一个connection对象
高可用:
代码层面:
代码的复用性:把一些相同的或者相似的操作抽取出来
程序的解耦合:外部的配置文件
面向接口的编程:
public void adb(List list){}
设计模式:装饰者模式
明确知道collection的实际对象,才能用继承
使用装饰者模式增强connection中的close方法
高性能:
连接池:
装有连接的容器,使用连接时,可以从连接池中进行获取,使用完成后将连接归还连接池
目的:提升性能
原因:因每次连接数据库时创建连接等操作频繁,效率会降低,且费时间,占内存
原理:由连接池创建一个几或几十个连接,然后放入池中,用时,就从池中取出创建好的数据库连接,用完了并不断开数据库连接,而是放回池中,等待下次使用。
优点:能控制数据库的压力,当大量用户同时涌入时,连接池只会使用池限 制            数据库连接数目,而不会不停的向数据库请求连接,最后导致服务器崩溃。
Druid开源连接池:阿里开发的
C3P0开源连接池:
Dbutils:对jdbc简单的封装
创建核心类:QueryRunner qr = new QueryRunner(DataSource)
Qr.query:查询
Qr.update:增删改
ArrayHandler
将一条记录封装到一个数组当中。这个数组应该是Object[]。
ArrayListHandler
将多条记录封装到一个装有Object[]的List集合中。
BeanHandler
将一条记录封装到一个JavaBean中。
BeanListHandler
将多条记录封装到一个装有JavaBean的List集合中。
1.
2.
3.
MapHandler
将一条记录封装到一个Map集合中,Map的key是列名,Map的value就是表中列的记录值。
MapListHandler
将多条记录封装到一个装有Map的List集合中。
ColumnListHandler
将数据中的某列封装到List集合中。
ScalarHandler
将单个值封装。
KeyedHandler(了解)
将一条记录封装到一个Map集合中。将多条记录封装到一个装有Map集合的Map集合中。而且外面的Map的key是可以指定的。
XML
使用XML作为配置文件的方式完成模拟Tomcat
标记语言
【Java基础的网络编程】
【XML的概述】任何格式都可以解析
允许用户自定义标签的
作用:
1. 传输和存取数据
2. 软件的配置文件(结构清晰)
使用:
数据交换(以前)
【XML语法】
文档声明:通常出现在XML的第一行第一列
注释:<!- - 注释- ->
元素命名规范:
不能以数字或标点,字符“xml”开始
不能包含空格
***** 名称中不能包含冒号(:)
属性:
属性的名称规范与元素一致.
***** 属性需要使用引号!
CDATA区:
<![CDATA[内容]]>-->字符串
【xml的解析】
Xml的解析:从XML文档中获得想要的数据(通过代码完成的)
XML的解析的方式(******):面试题:优缺点的比较
DOM解析:一次性将文档加载到内存形成树形结构,来进行解析(文档对象模型)
缺点:若文档过大,内存容易溢出
优点:对xml进行增删改的操作
SAX解析:事件驱动的方式,逐行进行解析
缺点:不能对文档进行增删改的操作
优点:若文档过大,不会导致内存的溢出
技术:
针对这两种解析的方式,不同的公司提供了不同的API的实现.
* JAXP:SUN公司提供的一套XML的解析的API.
* JDOM:开源组织提供了一套XML的解析的API-jdom.
* DOM4J        :开源组织提供了一套XML的解析的API-dom4j.
* pull                :主要应用在Android手机端解析XML.
XPath:
Dem4j的XPath支持的API:
List(返回值) document.selectNodes(String xPath);
Node(返回值) document.selectStringNode(String xPth);
约束
就是用来约束XML的文档中可以出现哪些标签,不能出现哪些标签,标签中是否有顺序,出现的次数.
* 作用:用来规范XML的写法
***** XML的约束的种类及区别?(面试题)
     * DTD 和 Schema :
         * 区别:
             1.DTD语法是自成一体的.Schema语法就是XML的语法.
             2.Schema的语法就是XML的语法所以更容易被解析器所解析.
             3.Schema支持名称空间.
             4.Schema有比DTD更加强大的语义和语法的约束.
DTD的语法        :(了解)
* DTD的引入方式:
     * 内部的DTD:
    <!DOCTYPE persons [
    ]>
     * 外部的DTD:
         * 一种本地DTD:
         <!DOCTYPE persons SYSTEM "unknown.dtd">
         * 一种网络DTD:
         <!DOCTYPE persons PUBLIC "//UNKNOWN/" "unknown.dtd">
* DTD的语法:
* 元素:
    * <!ELEMENT 元素名 元素类型>
      * 元素类型:
         * EMPTY
         * ANY
         * 子元素
            * 是否有序: 使用 逗号(,)或者竖线(|)表示.
            * 出现的次数:?:零次或一次 +:一次或多次 *:零次或多次
         * PCDATA:字读数据
    * 属性:
        * <!ATTLIST 元素名称 属性名称 属性的类型 属性的约束>
            * 属性的类型:
                * ID类型:表示属性值需要是唯一的.
                * CDATA类型:普通的字符串.
                * 枚举:
            * 属性的约束:
Schema的语法:(了解)
<?xml version="1.0" encoding="UTF-8"?>
<!--
    名称空间:一个XML只能引入一个DTD约束文档.使用了Schema约束XML文档,一个XML可以引入多个Schame的约束!!!
如果再多个Schema文档中定义了相同的属性名称 该怎么办?
    * 名称空间类似于java中的package.通过名称空间区分 标签或属性来自于哪个文档的!!!通常名称空间唯一的不重复的即可.一般情况下使用一个URL地址表示一个名称空间.
xmlns:xml name sapace .代表当前的文档应用的名称空间.
targetNameSpace:目标名称空间.
elementFormDefault:
-->
P:
Node:节点(父对象):{ Document-->对象
Element-->元素(标签)
Attribute-->属性}


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马