Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2863075
  • 博文数量: 178
  • 博客积分: 2076
  • 博客等级: 大尉
  • 技术积分: 2800
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-10 10:50
文章分类

全部博文(178)

文章存档

2010年(4)

2009年(13)

2008年(161)

我的朋友

分类: Java

2008-04-29 16:42:17

****开发人员测试题  

感谢参加**软件有限公司程序编写能力考试,请按照本文档要求编写相关的应用程序,并在5个工作日内将程序源代码、编译结果、相关文档(如果有)发送到 *小姐)收。

试题编码

PKUHRTS012

测试内容

J2EE开发人员

标准时间

5个工作日

   
 

1        基本要求

()            请编写JAVA代码实现本文档所要求的功能

()            本测试侧重考察JAVA中间应用程序编写能力,要求编写的JAVA组件可以成功部署到J2EE应用服务器上(TOMCAT,WEBLOGIC等)

()            为考察接口调用及结果考察,要求编写简单的前端应用(客户端、页面均可),调用编写的JAVA组件

2        功能要求

说明:在我们的应用程序编写中,所有的业务操作均通过XML标志实现前端和中间应用服务器的接口,如下示例:

 

<PKUDOC pkusoft="urn=schemas-pkusoft-com:fz" version="2.0">

   <DATAINFO>

       <TABLE name="PERSON" operation="0">

          <ID state="0">00003ID>

          <NAME state="0">刘军NAME>

       TABLE>

       <TABLE name="PERSON" operation="1">

          <ID  state="5">00001ID>

          <NAME state="0">张惠NAME>

       TABLE>

       <TABLE name="PERSON" operation="2">

          <ID state="5">00002ID>

       TABLE>

   DATAINFO>

PKUDOC>

 

说明:TABLE节点:表示要进行操作的数据库表名称,name属性为要操作的表的数据库名称,其子节点的节点名为要处理的字段名,子节点的值为字段的值

      Operation 属性:表示要进行的数据库操作,0表示insert操作;1表示update操作;2表示delete操作

       State     属性:0表示普通操作类型;5表示当updatedelete该字段为操作的 where 条件

XML1

要求:

请按照上述的XML,编写一个JAVA组件,实现如下功能:

l        和前端的接口,接受前端程序提交的XMLXML1)。

l        解析XML,并依据XML的节点信息进行业务处理

l        业务处理包括三个内容:

n        增加一条新记录“刘军”,人员编号为“00003

n        修改人员编号为“00001”的人员名字为“张惠

n        删除编号问“00002”的人员

l        以上业务操作在同一事务中

l        业务处理只要求生成SQL语句,SQL可以生成文件或者显示在前端界面上。

 


           
            //节点有多个比如:说明root(Element) 只能看到单层的node节点
           
            if (node instanceof Element) {   
                String nodeName = node.getName();   
                // 如果节点名字为table就加入到nodeList中   
                if (nodeName.equals(elementName)) {   
                    nodeList.add((Element)node);   
                }   
               
                System.out.println(element.nodeCount()+nodeList.toString());
                //xiao%%%%%%%%%%%%%%递归结束的条件
                //用到递归是因为每个A上层节点只能看到下层的节点B,其更下层的节点C ,A是看不到的.结构:A->B->C
                // 递归
               
                treeWalk((Element) node,elementName);   
            } else {   
  
            }   
        }   
    }   
       
  
    /**  
     * 解析一个的元素  
     *   
     * @param element :一个table元素  
     * @return:根据协议生成一条SQL语句  
     */  
    /*TABLE节点:表示要进行操作的数据库表名称,name属性为要操作的表的数据库名称,其子节点的节点名为要处理的字段名,子节点的值为字段的值
    Operation 属性:表示要进行的数据库操作,0表示insert操作;1表示update操作;2表示delete操作
     State     属性:0表示普通操作类型;5表示当update和delete该字段为操作的 where 条件
*/
    public static String parse2SQL(Element element) {   
        String sql = null;   
        String insertField = null;   
        String insertValue = null;   
        String updateField = null;   
        String condition = null;   
        // 得到表名   
        String tableName = element.attributeValue("name");   
        // 得到操作类型   
        String operation = element.attributeValue("operation");   
  
        // 考虑到可能没有NAME元素 使用list的方式获得名,值   
        List eleList = element.elements();   
        if (eleList.isEmpty()) {   
            return null;   
        }   
  
        java.util.Map fieldMap = new java.util.HashMap();   
        for (int i = 0; i < eleList.size(); i++) {   
            // 得到元素的名字   
            String eleName = eleList.get(i).getName();   
            // 元素的text   
            String eleTest = eleList.get(i).getText();   
  
            // 得到元素的state的属性的值   
            String eleAttribute = eleList.get(i).attributeValue("state");   
  
            if (eleAttribute.equals("0")) {   
                // 把用于普通操作的字段放入map   
                fieldMap.put(eleName, eleTest);   
            } else if (eleAttribute.equals("5")) {   
                // 得到条件   
                condition = eleName + "=" + eleTest;   
            }   
  
        }   
  
        // 迭代map   
        Iterator it = fieldMap.keySet().iterator();   
  
        // 根据协议生成具体SQL   
        switch (Integer.valueOf(operation)) {   
        case 0:   
  
            while (it.hasNext()) {   
                String key = it.next();   
                insertField = key + "," + insertField;   
                insertValue = fieldMap.get(key) + "," + insertValue;   
            }   
            // 截取最后的一个逗号   
            insertField = insertField   
                    .substring(0, insertField.lastIndexOf(","));   
            insertValue = insertValue   
                    .substring(0, insertValue.lastIndexOf(","));   
  
            sql = "INSERT INTO " + tableName + "(" + insertField + ") VALUES ("  
                    + insertValue + ")";   
            break;   
        case 1:   
            while (it.hasNext()) {   
                String key = it.next();   
                updateField = key + "=" + fieldMap.get(key) + "," + updateField;   
            }   
            // 截取最后的一个逗号   
            updateField = updateField   
                    .substring(0, updateField.lastIndexOf(","));   
  
            if (null == condition) {   
                sql = "UPDATE " + tableName + "  SET (" + updateField + ")";   
            } else {   
  
                sql = "UPDATE " + tableName + "  SET (" + updateField   
                        + ") WHERE " + condition;   
            }   
            break;   
        case 2:   
            if (null == condition) {   
                sql = "DELETE FROM " + tableName;   
            } else {   
                sql = "DELETE FROM " + tableName + " WHERE " + condition;   
            }   
            break;   
        default:   
            sql = "";   
            break;   
        }   
        //测试   
        System.out.println("-----------" + "SQL: " + sql);   
        return sql;   
    }   
       
       
       
    //测试用方法   
    public static String getXML() {   
        String xml = ""  
                + ""  
                + " " + "   "  
                + " 00003"  
                + " 刘小小" + "
"  
                + " "  
                + " 00001"  
                + " 张惠" + "
"  
                + " "  
                + " 00002" + "
"  
                + "
" + "
";   
        return xml;   
    }   
  
  
  
  
   
  
阅读(551) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~