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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 厦门校区   /  2018-5-30 18:01  /  5050 人查看  /  76 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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:脑袋一片空白,对于今天所学内容的回忆在细节部分完全没有思路,总结先暂且写到这,这部分内容在后续再进行复习!
回复 使用道具 举报
林荣彬
      今天主要学习了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对象--根据指定标签查询的对象--遍历集合向下转型---打印内容
回复 使用道具 举报
吴俊斌
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
   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来传输数据
回复 使用道具 举报
郑志祥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
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对象.
【步骤四】获得跟节点.
【步骤五】从跟节点下查找其他的节点.
回复 使用道具 举报
林恒山
今天讲了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);
回复 使用道具 举报
凌辉:
XML 指可扩展标记语言,用来传输 和存取数据和用来当做配置文件,现在主要是用来当做配置文件
XML的基本语法
* XML必须有关闭标签
* 区分大小写
* 属性需要有引号
* 标签必须正确嵌套
回复 使用道具 举报
任佳锋
关于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文件的增上改查操作。

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

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

用的较为多的是Dom4j工具
回复 使用道具 举报
123
您需要登录后才可以回帖 登录 | 加入黑马