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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

同学们,今天继续学习了DBUtils,我们学习了ResultSetHandler的几种实现类,而后我们又学习了XML配置文件,这在我们之后的JavaWeb开发中大家几乎天天会用到。

今日需要掌握的有:
  • 熟练使用BeanHandler和BeanListHandler对查询的数据进行封装
  • 熟练使用ScalarHandler对查询的数据进行封装
  • 理解XML的作用
  • 会使用dom4j结合Xpath对xml进行解析

请同学们按照如上要求,总结今日所学。




76 个回复

正序浏览
王刘锁
依稀记得早上学习的是DBUtils的查询query()方法!其实是把查询到的数据封装.还
好要重点掌握的就两种方式也就是结果集的一些实现类,
首先不管哪种方式,我们先创建queryRunner对象
QueryRunner queryRunner = new QueryRunner(JDBCUtils.getDataSource());
接下来就是各种查询方法
第一种:数组ArrayHandler()和ArrayListHandler()的封装方法,
object [] obj = queryRunner.query("select * from accounts where id=?",new ArrayHandler(),1);
1是?对应的值---这时查询一条记录
System.out.println(Arrays.toString(obj);---输出
List<object[]> list = queryRunner.query("select * from accounts where id=?",new ArrayListHandler(),1);
,---这是查询多条记录,每条记录是一个数组,
把数组存入集合,这种方式要遍历list来输出
for(Object[] object1 :list){
      System.out.println(Arrays.toString(object1));
        }
第二种方法:对象BeanHandler()和BeanListHandler(),这中方式要事先创建一个
bean(Account类 必须空参构造和setget方法toString方法)来
Account account = queryRunner.query
("select * from accounts where id=?",new BeanHandler<Account>(Account.class),1);
这里面泛型写的就是之前创建的bean,参数是bean的class对象,返回的是bean对象,那我们就可以直接输出这
个对象.那如果查询多条记录就可以参考上面的数组方法不过就是数组换成对象.
第三种:单值封装ScalarHandler(),很简单,查询统计数的时候可以用
Object obj = queryRunner.query("select count(*) from accounts",new ScalarHandler());
,直接输出obj就是统计出来的数字
然后学习了XML;它是一种通用性扩展标记语言跟HTML很像,不过XML现在一般用来做
为配置文件,因为它通用于各种编程语言,虽然它也有传输数据和存储数据的功能,
但是比它功能强大存储有数据库传输有Json,那我们学习一门语言就要学习它的语
法和规范.比较重要的是XML的标签是可扩展的我们可以自己定义标签,但是必须有
关闭标签,标签的属性值必须用引号,嵌套必须规范对应,并且标签名严格区分大小
写,说到名字那规则也要说一下,起名字可以用数字字母和其它字符,但不能数字和
标点符xml字样开头,而且名称不能有空格,像特殊字符和声明注释什么的简单的可以去查手册!!
下面写一段代码,用DOM4J+XPath解析XML文件
关于解析方式我们只要记住解析方式只有两种DOM和SAX,两者的不同就是DOM加载进
内存形成树结构,方便曾删改数据但是如果文件太大会内存溢出,SAX呢就是一条一
条的解析,不会内存溢出但是不能增删改数据,DOM4J巧妙的融合两种方式所以用的
最多,XPath呢是定义了一些可以直接获取标签路径的表达式,很暴力的样子.下面是
解析步骤
第一步:导包.dom4j-1.6.1.jar 不多说
第二步:创建解析器:SAXReader reader = new SAXReader();
第三步:解析文档:Document document = reader.read("xml/demo.xml");Document
是文档加载进内存形成树结构后的对象
第四步:利用XPath的格式来获取想要的标签元素.具体的表达式可以查api
List<Node> list = document.selectNodes("//city");
遍历list输出
for(Node node : list){
        Element element = (Element)node;强转,
        System.out.println(element.getText()--获取文本内容);
        }
很多表达式和方法查手册就好了.然后是约束,就记住有两种约束DTD和Schema以及
区别就可以了,毕竟也不可能自己去写约束,区别就是DTD自立门户,Schema跟XML一
家亲,所以跟容易被解析并且支持名称空间(不知道啥意思)比DTD更强大的约束力.
回复 使用道具 举报
本帖最后由 Do1 于 2019-11-23 00:36 编辑

BeanHandler和BeanListHandler还有ScalarHandler都是ResultSetHandler的实现类,DBUtils帮我们写好了方法,我们只需要传入一个javabean范型,还有通过这个范型的字节码反射来获取这个javabean的对象,这样我们就可以把sql读取好的数据放入这个类中,这个类中主要有set和get方法每读到一次sql传过来的数据就把这个数据set进去,如果是单个数值就用ScalarHandler用Object类来接收,多个就用BeanListHandler用List集合接收,也可以用Map集合来接收非主流的值,格式为Map<Object,Map<String,Object>>用的是KeyedHandler类,ColumnListHandler类可以用来接收表中行的指定列的值.

XML主要是用来配置文件的,XML是一种可扩展标记语言它和超文本标记语言一样都是用标签,不同的是XML中的标签名没有被规定住可以随便用,不过XML有基本的语法比如XML必须有关闭的标签,必须区分大小写,所有的属性值需要有引号,标签也需要正确的去嵌套,XML有一个文档声明放在最上方
<?xml 属性名="" 属性值="" ...>这个主要是对XML文件指定一个规则
XML中的约束以后不需要我们来写,是大神写的所以了解一下就行了
今天主要学习的是通过java代码获取到xml中的值,用到的是dom4j这个东西SAXReader Document Element注意不要导错包,List<Node> list = document.selectNodes("//person['@id']");这里面的字符串可以传各种数据,去看API写了很多方式,底层的东西不需要了解,所以会用这个dom4j解析就行了

回复 使用道具 举报
常小天
今天继续学习了JDBC的进阶内容,接着又学习了一些XML的知识。
JDBC进阶部分内容学习的是DBUtils的查询操作。使用DBUtils查询数据库数据的时候,我们将查询的结果进行封装,不同方法将其封装成不同的数据类型。这里我们重点掌握BeanHandler方法和BeanListHandler方法,这两个方法将查询结果封装成了类,一条表记录就封装成一个对象,前者查询单条记录并封装,后者查询多条记录并封装,将封装成的多个对象再装进集合中返回。这里需要传入一个字节码文件作为参数,这个字节码文件时我们编写的与要查询的记录相匹配的类的字节码文件。需要注意的是这个类中的成员变量的类型和变量名要与待查询的记录中的字段完全一致,否则就会出错。这是因为封装的方法就是将查询的数据赋给这个类的成员变量,而能够数据赋给正确的,相匹配的变量的依据就是类的变量名和表记录的字段名一致。
XML部分的内容主要是使用DOM4J以及XPath解析XML文件。XML文件的编写与HTML很类似,个别不同的地方稍加注意即可。XML的语法要求比HTML严格,XML区分大小写,必须要有根标签,必须要关闭标签,属性必须要加引号……编写好XML文件后,再编写java代码对其进行解析。步骤为:创建解析器、解析并返回document对象、使用document对象获得标签对象、通过标签对象获得其内容和属性。这里可以利用Xpath简化代码。正确使用“//标签名【@属性名】”的格式并理解其含义。
回复 使用道具 举报
吴利君
今天学习了DButils的查询方法的使用主要注意的是BeanHander的使用,这个可以和java对象结合起来对数据库的表进行查询,获取列表或的单个的很方便,然后是XML,它是可扩展标记语言,可以用于数据的传输和存储,或者一些框架啊软件的配置文件,比如后面的要学习的SSH,SSM里面就有大量用到配置文件的地方。
XML是一种很严谨的语言,它对大小写敏感,必须标签真确嵌套等等,不过建议统一使用小写,然后他的名称命名规则也有要求,所有要注意!
然后是XML的解析,有两种,一种是DOM解析,这种解析一次性可以吧所有的内容加载到内存,然后形成一个树形结构,这种解析的好处就是可以对数据进行增删改,但是当内容过多就会导致内存溢出,可以结合实际情况进行选择,然后是SAX解析,这种解析是逐行解析,对于内存不会溢出,但是却不能进行增删改,优点很好,缺点也很明显。
DOM4J这个有开源组织提供的一个解析的API他结合了DOM解析和SAX解析,大大提高了解析效率,而且使用XPATH进行解析效率更快,它的List document.selectNodes(String xPath)和 * Node document.selectSingleNode(String xPath),两个方法能改快速查找你要查找的内容。
然后是XML的约束,它有两种, DTD 和 Schema他们的区别有四点,其一是DTD语法是自成一体的而Schema语法就是XML的语法,其二是Schema的语法就是XML的语法所以更容易被解析器所解析,其三Schema支持名称空间,其四Schema有比DTD更加强大的语义和语法的约束。这些据说以后面试会被问到,要记。
最后是tomcat大致说了一下,tomcat是一个小型服务器,兼容很多java的web项目,很多都是使用它开发的,很好用,有的大型网站甚至使用多个tomcat搭建分布式服务器集群,总之是个很厉害的东西。
回复 使用道具 举报
白有旺
XML文件可以用来作为一种小型数据库存在,但更多时候在项目中都是用来当成配置文件用的,也就避免不了对XML文件的增上改查操作。

在java中,解析XML文件的方式大致分为两种:DOM解析,SAX解析

先来说DOM解析方式:xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容。

用的较为多的是Dom4j工具
回复 使用道具 举报
任佳锋
关于DBUtils的使用:
查询:
1.导入jar包
2.创建连接池对象ComboPooledDataSource
3.创建核心对象QueryRunner
4.调用query方法得到结果        
BeanHandler,BeanListHandler,ArrayHandler,ArrayListHandler

增删改:
1,导入jar包(数据库连接,c3p0,dbutlis)
2,创建连接池对象ComboPooledDataSource
3,创建DBUtlis传入连接池对象QueryRunner
4,调用update例如queryrunner.update("update cj set math=math+? where id = ?", "+50", "1");

xml的解析的方式
1.DOM解析  Document Object Model:文档对象模型解析
2.SAX解析  Simple Api for XML:简单的API进行xml文件的解析
回复 使用道具 举报
凌辉:
XML 指可扩展标记语言,用来传输 和存取数据和用来当做配置文件,现在主要是用来当做配置文件
XML的基本语法
* XML必须有关闭标签
* 区分大小写
* 属性需要有引号
* 标签必须正确嵌套
回复 使用道具 举报
林恒山
今天讲了DBUtils的ResultSetHandler的实现类:
调用DBUtils jar包里面的QueryRunner的query方法,传入sql语句,ResultSetHandler的实现类,sql语句的参数的值.
query方法的第二个参数传入的是ArrayHandler,得到查询到的一条数据存放到数组中.
ArrayListHandler则是将多条记录存放到装有Object[]的List集合中.
BeanHandler将一条记录封装到JavaBean中
BeanListHandler将多条记录封装到一个装有JavaBean的List集合中
MapHandler将一条记录封装到一个Map集合中,Map的key是列名,Map的value就是表中列的记录值。
MapListHandler将多条记录封装到一个装有Map的List集合中
ColumnListHandler将数据中的某列封装到List集合中
ScalarHandler将单个值封装
KeyedHandler(了解)将一条记录封装到一个Map集合中。将多条记录封装到一个装有Map集合的Map集合中。而且外面的Map的key是可以指定的


xml的作用:传输和存取数据,传输数据被json代替,存取数据被数据库代替.只剩下作为软件的配置文件.

xml语法:必须有闭合标签;区别大小写;属性需要有引号;标签的嵌套要正确.

xml声明:写在xml文档的第一行第一列.
<?xml 属性名=”属性值” 属性名=”属性值” ...?>
version:必写,使用"1.0";encoding:字符集

xml注释跟html注释一样
<!-- XML的注释 -->

xml元素/属性的命名规则:
不能以数字/特殊字符/xml(XML/Xml)开头;
不能包含空格;
包含数字/字母/其他字符.

xml特殊字符
> &gt;        < &lt;  & &amp;  ' &apos;   " &quot;

xml的CDATA区(character data) :
<![CDATA[内容]]>

xml解析:dom解析和sax解析
两种解析的区别:
dom一次性加载文档到内存,形成树形结构进行解析.
优点:可以对xml进行增删改操作.
缺点:文档过大的话,容易导致内存溢出.

sax:一行一行的解析
优点:文档过大也不会内存溢出
缺点:不能进行增删改操作

针对解析方式,有不同的api实现:
sun公司的jaxp       
开源组织的jdom
开原组织的dom4j       
android手机端解析xml的pull

现在流行的dom4j步骤:
导包dom4j-1.6.1.jar
创建解析器
SAXReader reader = new SAXReader();
解析文档获得代表文档的Document对象
Document document = reader.read("xml/demo1.xml");
// 获得跟节点
Element root = document.getRootElement();
从跟节点下查找其他的节点
element() elements()

XPath:
dom4j支持XPath的jar包.
jaxen-1.1-beta-6.jar
dom4j的XPath支持的api:
List document.selectNodes(String xPath);
Node document.selectSingleNode(String xPath);
回复 使用道具 举报
叶凌青
今天主要学了DBUtils
query(Connection conn, String sql, ResultSetHandler<T> rsh, Object... params) ,用来完成表数据的查询操作
MapHandler        将结果集第一行封装到Map集合中,Key 列名, Value 该列数据
MapListHandler        将结果集第一行封装到Map集合中,Key 列名, Value 该列数据,Map集合存储到List集合
ArrayHandler:将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值
ArrayListHandler:将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。
BeanHandler        :将结果集中第一条记录封装到一个指定的javaBean中。
BeanListHandler        :将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
ColumnListHandler:将结果集中指定的列的字段值,封装到一个List集合中
ScalarHandler:它是用于单数据。例如select count(*) from 表操作。

什么是 XML
XML 指可扩展标记语言(EXtensible Markup Language)
XML 是一种标记语言,很类似 HTML
XML 的设计宗旨是传输数据,而非显示数据
XML 标签没有被预定义。您需要自行定义标签。
XML 被设计为具有自我描述性。
XML 是 W3C 的推荐标准
作用
传输 和 存取数据
用来当做配置文件
重点
xml解析
目的:从XML文档中获得想要的数据(通过代码完成的.)
解析方式:
DOM解析:DOM:Document Object Model.这种方式是W3C推荐的处理XML的一种方式。
SAX解析:Simple Api for XML.这种方式不是官方标准,属于开源社区XML-DEV,几乎所有的XML解析器都支持它
DOM和SAX解析的区别:
DOM: 一次性将文档加载到内存当中, 形成树形结构进行解析,我们可以非常方便的操作任意的标签和属性。
优点:可以对xml进行增删改的操作
缺点:如果文档特别大,容易导致内存溢出
节点: 标签、属性、文本、甚至是换行都称之为节点
SAX:事件驱动的方式,一行一行的进行解析。
优点:如果文档特别大,不会导致内存溢出
缺点:不能对文档进行增删改的操作。
解析步骤:
DOM4J的入门案例步骤:
【步骤一】导入jar包.dom4j-1.6.1.jar
【步骤二】创建解析器
【步骤三】解析文档获得代表文档的Document对象.
【步骤四】获得跟节点.
【步骤五】从跟节点下查找其他的节点.
回复 使用道具 举报
郑志祥day12-JDBC高级与XML
知识一
rsh
查询一个 --封装成一个对象
查询多条-- 封装成多个对象 在添加到一个集合中



知识二
arrayHandler
将查询到的一条记录封装到一个object的数组中()
用object接受,因为数据有多种类型

arrayListHandler
将多个object[]数组封装到一个object的集合中


知识点三(重要)
javaBean是一个实体类,实体类就是跟之前的Student类差不多,只有属性和属性的get和set方法,没有main方法
百度下什么是实体类
《acount》的类型
acount.class 字节码对象
注意事项;那些属性需要跟表的顺序--对应,顺序不对会报错,
类名与表名可以不一样
表格列和实体类的属性值需要一一对应


BeanHandler
将一条记录封装到一个javaBean对象中(查下javabean的api)

BeanListHandler
将多条记录封装到集合中

@Test
       //BeanHandler 将一条记录封装到一个javaBean当中
       public void Demo3() throws SQLException{
             //创建核心类(传入连接池)
               QueryRunner queryRunner=new QueryRunner(JDBCUtils2.getDataSource());
            Account account = queryRunner.query("select * from account where id=?",
                            //创建一个bean匿名对象
                            new BeanHandler<Account>(Account.class),2);
               System.out.println(account);
       }
       @Test
       //BeanListHandler
       //将多条记录封装到BeanListHandler集合当中
       public void Demo4() throws Exception {
               QueryRunner queryRunner=new QueryRunner(JDBCUtils2.getDataSource());
                  List<Account> list = queryRunner.query("select * from account", new BeanListHandler<Account>(Account.class));
                  for (Account account : list) {
                                System.out.println(account);
                        }
       }

知识点四
MapHandler
map集合中的key是列名,value是表格里面的数值

MapListHandler
将多条map集合添加到List集合中

xml可扩展性语言(标签自己定义)
html超文本链接(标签是w3c规定好了)
XML的基本语法
1.XML必须有关闭标签
2.严格区分大小写
3.属性需要有引导
4.标签必须正确嵌套


<![CDATA[内容]]>  内容将都会被当成字符串


XML的解析(面试题目)
解析方式有两种
1.DOM解析 文档对象模型
2.2.SAX解析 简单的API来解析

解析方式的区别
1.DOM一次性将文档加载到内存,形成树形结构,进行解析
缺点;如果文档特别大,容易导致内存溢出。
优点;对XML进行增删改的操作。
2.SAX是一行一行的解析,
缺点;不能对文档进行增删改。
优点;如果文档特别大,不会导致内存溢出。

DOM4j入门案例步骤(重要)
1.导入包jar Dom4j-1.6.jar
2.创建解析器,解析XML的文档
3.获得根节点
4.从根节点查找子节点
5.通过子节点获取元素
6元素来获取文本内容


DOM4J的XPath(重要)
public void demo2() throws DocumentException{
                //创建解析器
                SAXReader reader=new SAXReader();
                //解析xml返回Document对象
                Document document = reader.read("xml/demo1.xml");
                //查找到有id的person
                List<Node> list = document.selectNodes("//person[@id]");
                //通过增强for来循环,拿到集合里面的每个值,赋值给node
                for (Node node : list) {
                        //将节点强转为元素element
                        Element element=(Element) node;
                        //获取元素的属性值
                        //System.out.println(element.attributeValue("id"));
                        System.out.println(element.getText());
                        //System.err.println(node.getText());
                }
        }
method的提交方式 past(提交后台无法看到)
                  get可以在网址栏上显示
行内优先级 就近原则

Schema里面都是字符串



回复 使用道具 举报
曾耀峰

一、DBUtils
   1.DBUtils的更新方法
   update(String sql,Object...Object);
   update()这个方法能执行对增删改等三个DML操作。实现原理是从PreparedStatement对象中获预编译语句的元数据对象,进而得到sql语句中,问号占位符"?"代表的参数个数,和参数的数据类型。然后遍历参数个数。利用pstmt.setObject()方法对参数赋值。
public static  void update(String sql, Object... objects) {
                Connection conn = null;
                PreparedStatement pstmt = null;

                try {
                        conn = C3P0Utils.getConnection();
                        pstmt = conn.prepareStatement(sql);
                        // 获取参数个数
                        ParameterMetaData pmd = pstmt.getParameterMetaData();

                        // 获取?号的个数,就是参数的个数。根据参数的个数设置数据的值
                        int count = pmd.getParameterCount();
                        for (int i = 1; i <= count; i++) {
                                pstmt.setObject(i, objects[i - 1]);
                        }
                        //执行SQL语句
                        pstmt.executeUpdate();
                } catch (Exception e) {
                        System.out.println("1111");
                }finally {
                        C3P0Utils.release(conn, pstmt);
                }
   
    这里比较有意思的是没有采用函数重载,而是使用了可变参数(Object...objs)的写法接收了不确定个数的方法。了解一下即可
   
   2.DBUtils的查询方法
    query(String sql,new ResultSetHandler,Object...objs)
    根据ResultSetHandler接口的实现子类,有九个保存数据的方法。其中常用的是5个:
    1)Object[] ArrayHandler:返回Object[] 得到一个记录的数据存放在数组中
      List<Object[]> ArrayListHandler:返回一个ArrayList<Object[]>  查询多个
    2)Object BeanHandler<Object>(Object.class):得到一个Object对象,注意后面传入class参数
      List<Object> BeanListHandler<Object>(Object.class):得到一个装有Object对象的列表
    3)Map<String ,Object> MapHandler<String,Object>  得到一个map集合对象。String表示列名。整个map集合就是存放的是一个记录的"列名":"值"这样的对象。列名不可能重复
      List<Map<String, Object>> MapListHandler:得到一个装有map集合对象的list列表

      *Map遍历取值的两种方法了解一下:
       1.Set键找值:
       //获取所有的键值  
        Set<String> keys = map.keySet();  
         
        for(String key:keys)  
        {  
            String value = map.get(key);  
            System.out.println("键:"+key +"---"+"值:"+value);  
        }  

       2.EntrySet 键-值对象遍历

         Set<Map.Entry<String, String>> entrys = map.entrySet();  
      
            for(Map.Entry<String, String> entry:entrys)  
            {  
                String hunsband = entry.getKey();  
                String wife = entry.getValue();  
                System.out.println(hunsband+"-----"+wife);  
            }  
      
      提出一个疑问:map本身并没有遍历迭代器,只能通过Set集合来遍历。Set集合是无序的。因此在取出来的记录中。有可能是无序的。所以,应该少使用。
    4) List<Object> ColumnListHandler("列名"):得到一次查询结果中,某一列的所有值
    5) Object ScalarHandler() 只得到一个值

   
二、XML:
   作用:作为配置文件,传输与存储数据。
   解析步骤:
   步骤一: 导入dom4j核心jar包
   步骤二: 创建解析器
   步骤三: 解析文档
   步骤四: 获得根节点
   步骤五: 从根节点获取其他节点
   利用SAXReader解析,掌握一种即可。多了没用。以后通常用Json来传输数据
回复 使用道具 举报
吴俊斌
Dbutils查询query()方法,流程将查询的内容封装成对象.一般使用beanListHandler()

xml是可拓展标记语言 它和html很像,可以用来传送数据,存储数据,配置文件,不过现在

主要学习xml的解析方式:
      解析方式有两种:
     一种是dom解析,dom是一次加载到内存形成树状结构,可以进行增
删查改,但是会造成内存溢出
     第二种是sax解析:sax是一行一行解析,它不会造成内存溢出,但是
不能对数据进行操作,好在我们现在都使用数据库.   
     平时使用最多的是dom4j,使用流程
        一:导包
        二:创建解析器:SAXReader reader=new SAXReader();
        三:解析文档,获得文档对象:Document document = reader.read("xml/demo.xml");
        四:用XPath的格式来获取想要的标签元素.具体的表达式可以查api
回复 使用道具 举报
林荣彬
      今天主要学习了DBUtils的查询将一条或者多条语句进行封装,xml的入门了解并对dom4j和Xpath结合的使用对xml进行解析.
DButils的查询---封装查询到的数据
1. ArrayHandler:将一条记录封装到一个数组当中。这个数组应该是Object[]。
2. ArrayListHandler:将多条记录封装到一个装有Object[]的List集合中。
3. BeanHandler:将一条记录封装到一个JavaBean中。
4. BeanListHandler:将多条记录封装到一个装有JavaBean的List集合中。

xml:可扩展的标记语言,设计宗旨是传输数据,而非显示数据,
作用:
1.传输和存取数据
2.软件的配置文件

xml语法:
文档声明:通常出现在XML的第一行第一列的位置
写法: <?xml 属性名=”属性值” 属性名=”属性值” ...?>
      version        :必须的. 使用”1.0”
     encoding        :字符集.
xml元素的命名规则与Html相似.名称中不能包含有冒号.
xml的属性:属性的名称规范同元素一致,但是属性需要使用引号!

CTADA区:{![CDATA[ 内容 ]]}

XML的解析的方式:
1.DOM解析: DOM:Document Object Model.
2.SAX解析: Simple Api for XML.
两种的区别:
DOM:一次性将文档加载到内存,形成树形结构进行解析;   缺点:如果文档特别大,容易造成内存的溢出; 优点:对XML进行增删改的操作
SAX:事件驱动的方式,一行一行的进行解析,  缺点:不能对文档进行增删改的操作
优点:如果文档特别大,不会导致内存的溢出.

dom4j和XPath:
首先需要先进行导包导入jar包.dom4j-1.6.1.jar和jaxen-1.1-beta-6.jar
然后创建解析器--解析xml返回document对象--根据指定标签查询的对象--遍历集合向下转型---打印内容
回复 使用道具 举报
本帖最后由 COLDER 于 2018-10-18 19:15 编辑


Day12

今天的学习内容为JDBC高级部分的查找,XML
JDBC高级部分的查找:通过SQL查找数据库表格中的记录,如果是单条记录的话,将其封装成对象,再打印显示;
如果是多条记录,将其封装为集合再遍历显示.

查找的方法有:ResultSetHandler(对象or集合);ArrayHandler();ArrayListHandler();BeanHandler();
BeanListHandler();MapHandler();MapListHandler();ColumnListHandler();ScalarHandler();KeyedHandler();

XML:可扩展标记语言,作用为传输和读取数据及配置文件
XML的重点内容为XPath的解析,首先是导入Dom4J与XPath的jar包,然后创建解析器,解析XML的文档.
这边主要是通过List document.selectNodes(String xPath)和Node document.selectSingleNode(String xPath)
来获取XML文档中的多个节点和单个节点的内容.


PS:脑袋一片空白,对于今天所学内容的回忆在细节部分完全没有思路,总结先暂且写到这,这部分内容在后续再进行复习!
回复 使用道具 举报
许煜
JDBC查询及xml总结
Queryrunner.query(“sql语句”,”接受查询结果的抽象类实例”,args);
重点 beanhandler<>(class) beanlisthandler<>()
通过传入的class文件 通过反射直接对查询结果的数据进行处理 需要javabean提供无参构造方法 get/set方法
Xml重点 现在基本作为配置文件使用
Java代码获取xml文件的属性值步骤如下
创建解析器 SAXReader sr=new SAXReader()
解析文档获得document对象 docuement  sr.read(文档路径)
传统方法 1 获得根元素 element getrootelement()
         2查找根元素下面的子节点 element()一个 elements()多个
         3 elememnt.gettext()
快速的方法 document.selectsinglenode(String xpatn)
           Document.selectnodes(String xpath)
Tomcat 用来发布网站的服务器
回复 使用道具 举报
康元中 (5.30)
XML和Tomcat
1 XML:可扩展标记语言(允许用户自定义标签)
      XML作用:传输和存储数据
              主要用用于软件的配置文件
      XML的解析:从xml的文档中获取数据
      xml语法注意:声明必须写在文件左上角,必须要有跟标签,必须<?xml 属性名=”属性值” 属性名=”属性值” ...?>       

      分为两种解析方式:DOM解析 和SAX解析
              区别:DOM一次性将文档加载到内存,形成树状结构进行解析
                        缺点: 文档如果较大会出现内存溢出
                        优点:对XML进行增删该的操作
                   SAX: 事件驱动的方式,一行一行进行解析
                        缺点:不能对文档进行增删该操作;
                        优点:文档较大不会出现内存溢出;
        针对这两种解析,不同公司提供不同api实现: JAXP  /  JDOM  /DOM4J /PULL
重点:  使用DOM4j的Xpath 完成解析
        步骤
        导包 dom4j jar包;和xpath的包
        串键解析器 SaxReader reader =new SAXReader()
        解析xml文档获得Doucument对象Document document reader.read("xml文本路径")
                    selectNode 和selectSingleNode();
        学习xml 约束(了解)
        分成 DTD和Schema
        两者区别分别是
             1.DTD语法是自成一体的.Schema语法就是XML的语法.
             2.Schema的语法就是XML的语法所以更容易被解析器所解析.
             3.Schema支持名称空间.
             4.Schema有比DTD更加强大的语义和语法的约束.
       
2   使用DBUtils进行查询
    步骤: 导包DBUTils 的jar包/ CP30 的jar包 /mysql jar包
          xml配置文件准备jdvcutils的工具类( 创建连接的方法/创建连接池的方法/释放资源的方法)
          (1)ArrayHandler将一条记录封装到一个数组
             ArrayListHandler将多条记录封装到一个数组
          (2)BeanHandler 一条记录封装到javaBean
             BeanListHandler 多条记录封装到装有javaBean的List集合
             javaBean中的成员变量必须要和数据库中列名相同数据类型相同,且有无参构造!
回复 使用道具 举报
万冕

今天的知识主要掌握DBUtils的查询,每次都是查询相对的复杂,这次的查询有很多的实现类,主要掌握的是BeanHandler和
BeanListHandler,   BeanHandler是将记录包装进javaBean中的方式,BeanlistHandler 是将多条数据包装进list集合中,

XML是可扩展标记语言,可扩展主要表现在用户可以自定义标签,但是自定义也是有规范的,主要是用来当做配置文件,传输
存取数据,XML的语法比HTML的严谨,规范, CDATA区可以将特殊的符号都转成字符串形式.

XML的解析方式,有两种,DOM,SAX,DOM:优点能增删改,但是文件太大会内存溢出,SAX不能增删改,但是文件太大不会导致内存
溢出,

主要的解析方法时DOM4J   XPath,里面包含了DOM和SAX,首先是先创建解析器,然后获取document对象,然后在输入要获得的根节点,
在根节点的基础上去获得其子节点,

List<Node> list = doc.selectNodes("//name[@id]");
               
                for (Node node : list) {
                        Element e = (Element) node;
                        System.out.println(e.getText());
                }
回复 使用道具 举报
詹源
什么是XML:
一款可扩展的标记语言,可作为配置文件,传输和存取数据.

XML特点:
标签可以由开发者自行定义,具有自我描述性

基本语法:
1.必须有关闭标签
2.区分大小写
3.属性需要有引号
4.标签必须正确嵌套

文档声明:
在XML第一行第一列位置
写法:<?xml 属性名="属性值" 属性名="属性值"...?>
        *version:必须的,使用"1.0"
        *encoding:字符集.是使用浏览器打开的时候采用的默认的字符集的编码
        *standalone:描述XML文档是否需要依赖其他文件.
注释:<!-- XML的注释 -->
XML的元素:元素(标签)的命名规范,需要遵循以下规则
        名称可以含字母,数字,其他字符
        名称不能数字或者标点以及字符"xml"(或者XML,Xml)开头.
        名称不能包含空格和冒号:
属性:属性的名称规范与元素一样.属性需要引号

CDATA区:(CDATA:Character Data)

<![CDATA[ 内容 ]]>.内容的特殊符号不会被转译.

(重点)
XML解析方式:
DOM解析:  DOM:Document Object Model.
SAX解析:  Simple Api for XML.

区别:DOM一次加载到位,形成树形结构解析,可以对XML进行增删改,
     但是如果文档过大,易导致内存溢出


     SAX一行一行进行解析.不能进行增删改操作.
     相反,即使文档过大,也不会造成内存溢出.

回复 使用道具 举报
陈世彪:
今天学习了DBUtils和xml配置文件
使用DBUtils查找文件的方法有很多
ArrayHandler查找数据返回集合形式
ArrayListHandler可以查找多个数据返回集合,遍历集合获得里面的数
BeanHandler查找数据,返回bean类型,new BeanHandler()<对象.class>
BeanListHandler实现类对结果集进行处理,返回一个Bean类对象的集合
单条的查询可以使用ScalarHandler,返回一个Object类型对象
xml是可扩展标记语言,用来配置文件
也可以用来传输和储存数据,但是不常用
使用dom4j时,里面有两种解析方法
dom,一次性将文档加载到内存,如果文档特别大容易内存溢出,可以进行增删改操作
sax,一行一行进行解析,如果文档特别大不会导致内存溢出,不能进行增删改操作
对xml进行解析时,要先导入包
再创建解析器
SEXReader reader=new SEXReader();
解析文档获得Document对象
Document document = reader.read("xml/demo1.xml");
获得根节点
第一种
Element root = document.getRootElement();
第二种
Element root = document.selectNodes();
使用selectNodes时
如果要找一个元素的属性,要加上[@属性]
再使用attributeValue获得属性的值
回复 使用道具 举报
DBUtils::主要用的是ArrayHandler ArrayListHandler BeanHandler BeanLIstHandler 四种
BeanHandler 将一条记录封装到JAVABean中
BeanListHandler 将多条记录封装到JAVABean数组中
ArrayHandler:将结果集中的第一条记录封装到一个Object[]数组中
ArrayListHandler:将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。


*XML的作用:
1.传输 和 存储数据  配置文件

[XML的语法]:文档声明,注释,元素,属性,特殊字符和CDATA区

DOM4J的使用
        1 创建解析器 new SAXReader();
        2 解析文档获得Document对象
        3 获得根节点
        4 查找根节点下的子节点
       
XPath:
        dom4j支持XPath的jar包
        dom4j的XPath支持的API
                List document.selectNodes(String xPath);获取元素(标签)集合
                Node document.selectSingleNode(String xPath);获取单个元素(标签)对象
                元素(标签)对象.attributeValue(String)获取value值
回复 使用道具 举报
张述明
今天主要学习了DButils的高级和XML

DButils部分:
BeanlistHandler(重点)
将多条记录封装到javabean的List集合中;
Javabean用来描述实体

实体类中属性的名字要和表中的列名一致

类名可以不一样
ColumnListHandler
将某列的值封装到List集合中;

ScalarHandler
单值封装

Xml是扩展性标记语言
是一种标记语言;
宗旨是传输数据
自定义标签

和超文本标记语言的区别
Html每个标签都有自己特有的功能
Xml标签自定义

必须要有根标签


作用1:传输数据(过去式);
2:存储数据(现在使用数据库)
3:配置文件



Xml 注释   <!--注释-->.

XML的文档声明
出现在第一行第一列
Version 属性必须有
不能数字和标点符号开始
元素(标签)  名称中不能有逗号
Cdata区: 里面的特殊字符变成字符串
< ![CDATA [ 内容  ] ] >


Xml 解析
方式1 Dom解析
一次性将文档加载到内存,形成树形结构进行解析
缺点:如果文档太大,容易导致内存溢出
优点:对XML进行增删改

方式2 SAX解析
事件驱动的方式,一行 一行进行解析的
缺点:不能进行增删改
优点:文档特别大,也不会导致内存溢出.

Jaxp  Sun公司
Jdom
DOM4J
PULL


DOM4J

1.        导包
2.        创建解析器
3.        解析文档获得代表文档的document对象
4.        获得根节点
5.        从根节点下查找元素
Element 得到第一个元素
Elements 查找所有元素

DOM4J
List   document.selectNodes(String xpath);
Node document.selectSingleNode(String xpath)
;


Xml的约束的种类和区别
DTD
语法自成一体,schema语法就是xml的语法

Schema
支持名称空间
比dtd更加强大的语义和语法的约束





回复 使用道具 举报
sts 中级黑马 2018-5-30 21:55:51
32#
苏海斌
XML是一种可扩展的标记语言,跟HTML类似,可自定义标签,用于传输和存取数据.亦可作为配置文件.
XML必须有文档声明(声明中必须有version),并且在XML文件的第一行第一列;另外,XML区分大小写,属性要有引号,必须有关闭标签,而且标签必须正确嵌套.
在XML中有个CDATA区,在区中的文本会被解析器忽略,也就是被当做字符串;<![CDATA[内容]]>

XML的解析方式分为DOM和SAX,
DOM可以一次性将文档加载到内存中,从而形成树形结构进行解析,并且可以对XML文档进行增删改操作;不过缺点就是如果文档特别大容易导致内存溢出;
而SAX是以事件驱动的方式逐行进行解析的,不会导致内存的溢出,不过也有缺点,就是不能对文档进行增删改;
针对这两种解析方式有不同的API的实现
主要的DOM4J和pull;
重点掌握DOM4J;

XPath是一种路径语言,即用来确定XML文档中某部分位置的语言,将DOM4J解析的方式进行了增强,能采用document来调用

DOM4J解析步骤:
导入jar包
创建解析器
解析文档获得代表文档的Document对象
获得根节点
从根节点下查找其他节点
XPath

Document:
Element  |  getRootElement() :获取根元素对象(根标签)

Element:
List elements() :获取所有的子元素
List elements(String name):根据指定的元素名称来获取相应的所有的子元素
Element element(String name):根据指定的元素名称来获取子元素对象,如果元素名称重复,则获取第一个元素
String        elementText(String name) :根据指定的子元素名称,来获取子元素中的文本
String        getText() :获取当前元素对象的文本
void setText(String text):设置当前元素对象的文本
String        attributeValue(String name):根据指定的属性名称获取其对应的值
public Element addAttribute(String name,String value):根据指定的属性名称和值进行添加或者修改

SAXReader:
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马