****开发人员测试题 感谢参加**软件有限公司程序编写能力考试,请按照本文档要求编写相关的应用程序,并在5个工作日内将程序源代码、编译结果、相关文档(如果有)发送到 hr@***soft.net(*小姐)收。
试题编码 | PKUHRTS012 | 测试内容 | J2EE开发人员 |
标准时间 | 5个工作日 | | |
1 基本要求
(一) 请编写JAVA代码实现本文档所要求的功能
(二) 本测试侧重考察JAVA中间应用程序编写能力,要求编写的JAVA组件可以成功部署到J2EE应用服务器上(TOMCAT,WEBLOGIC等)
(三) 为考察接口调用及结果考察,要求编写简单的前端应用(客户端、页面均可),调用编写的JAVA组件
2 功能要求
说明:在我们的应用程序编写中,所有的业务操作均通过XML标志实现前端和中间应用服务器的接口,如下示例:
<?xml version="1.0"?> <PKUDOC pkusoft="urn=schemas-pkusoft-com:fz" version="2.0"> <DATAINFO> <TABLE name="PERSON" operation="0"> <ID state="0">00003</ID> <NAME state="0">刘军</NAME> </TABLE> <TABLE name="PERSON" operation="1"> <ID state="5">00001</ID> <NAME state="0">张惠</NAME> </TABLE> <TABLE name="PERSON" operation="2"> <ID state="5">00002</ID> </TABLE> </DATAINFO> </PKUDOC> 说明:TABLE节点:表示要进行操作的数据库表名称,name属性为要操作的表的数据库名称,其子节点的节点名为要处理的字段名,子节点的值为字段的值 Operation 属性:表示要进行的数据库操作,0表示insert操作;1表示update操作;2表示delete操作 State 属性:0表示普通操作类型;5表示当update和delete该字段为操作的 where 条件 |
(XML1)
要求:
请按照上述的XML,编写一个JAVA组件,实现如下功能:
l 和前端的接口,接受前端程序提交的XML(XML1)。
l 解析XML,并依据XML的节点信息进行业务处理
l 业务处理包括三个内容:
n 增加一条新记录“刘军”,人员编号为“00003”
n 修改人员编号为“00001”的人员名字为“张惠”
n 删除编号问“00002”的人员
l 以上业务操作在同一事务中
l 业务处理只要求生成SQL语句,SQL可以生成文件或者显示在前端界面上。
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
/**
* xml操作工具类
* readStrToXML(String strXML) 把字符串转为xml文档
* readFile(String fileName) 读取xml文件
* getTheElementList(Element element,String elementName) 遍历XML文档,得到指定的元素集合
* parse2SQL(Element element) 解析一个的元素根据协议生成sql语句
* @author jseed
**/
public class XMLTools {
// 测试方法
public static void main(String[] args) {
List list=getTheElementList(readStrToXML(getXML()).getRootElement(),"TABLE");
for (int i = 0; i < list.size(); i++) {
org.dom4j.Element ele = (Element) list.get(i);
parse2SQL(ele);
}
}
/**
* 把字符串转为xml文档
* @param strXML:字符串
* @return Document
*/
public static Document readStrToXML(String strXML) {
try {
InputStream fl=new ByteArrayInputStream(strXML.getBytes("UTF-8"));
SAXReader reader = new SAXReader();
Document document = reader.read(fl);
System.out.println("读取XML成功");
return document;
} catch (Exception ep) {
ep.printStackTrace();
return null;
}
}
/**
* 读取xml文件
* @param fileName:文件名
* @return Document
*/
public static Document readFile(String fileName) {
File fl = new File(fileName);
try {
SAXReader reader = new SAXReader();
Document document = reader.read(fl);
System.out.println("读取XML成功");
return document;
} catch (Exception ep) {
ep.printStackTrace();
return null;
}
}
/**
* 遍历XML文档,得到指定的元素集合
* @param rootElement: 根元素
* @param elementName:指定元素名
* @return:指定元素名的元素集合
*/
public static List<org.dom4j.Element> getTheElementList(Element rootElement,String elementName){
nodeList.clear();
treeWalk(rootElement, elementName);
return nodeList;
}
/**
* 遍历XML文档,得到指定的元素
* @param element 元素
*/
private static void treeWalk(Element element,String elementName) {
for (int i = 0; i < element.nodeCount(); i++) {
Node node = element.node(i);
// 如果节点为一个元素 一个节点可以为以下三种类型
// 1元素(Element)
// 2文字(text 空行也算)
// 3注解(Comment)
if (node instanceof Element) {
String nodeName = node.getName();
// 如果节点名字为table就加入到nodeList中
if (nodeName.equals(elementName)) {
nodeList.add((Element)node);
}
// 递归
treeWalk((Element) node,elementName);
} else {
}
}
}
/**
* 解析一个的元素
*
* @param element :一个table元素
* @return:根据协议生成一条SQL语句
*/
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<org.dom4j.Element> eleList = element.elements();
if (eleList.isEmpty()) {
return null;
}
java.util.Map<String, String> fieldMap = new java.util.HashMap<String, String>();
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<String> 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 = "<?xml version=\"1.0\"?>"
+ "<PKUDOC pkusoft=\"urn=schemas-pkusoft-com:fz\" version=\"2.0\">"
+ " <DATAINFO>" + " <TABLE name=\"PERSON\" operation=\"0\">"
+ " <ID state=\"0\">00003</ID>"
+ " <NAME state=\"0\">刘小小</NAME>" + "</TABLE>"
+ " <TABLE name=\"PERSON\" operation=\"1\">"
+ " <ID state=\"5\">00001</ID>"
+ " <NAME state=\"0\">张惠</NAME>" + "</TABLE>"
+ " <TABLE name=\"PERSON\" operation=\"2\">"
+ " <ID state=\"5\">00002</ID>" + "</TABLE>"
+ " </DATAINFO>" + " </PKUDOC>";
return xml;
}
// Element容器
private static java.util.List<org.dom4j.Element> nodeList = new java.util.ArrayList<org.dom4j.Element>();
}
有了这个工具类,就可以把XML 按照文档的协议转成SQL了
但是根据文档的要求 还需要部署到web容器上,需要一个客户端
我的思路是做一个web service,客户端用swing写个小界面就可以啦
分享到:
相关推荐
### SQL SERVER实用教程 T-SQL语言 #### 一、SQL语言概述 1. **SQL语言简介**: - **名称**:SQL(Structured Query Language),即结构化查询语言。 - **起源与发展**:最初由IBM公司开发并在其数据库系统中...
【标题】"毕业设计--基于某公司的招聘系统"是一个典型的Web应用开发项目,它利用了Spring Boot、Spring MVC、MyBatis以及Shiro这四个关键的技术栈。这个系统旨在为某公司提供一个全面的在线招聘解决方案,使得招聘...
【某公司门户网站】是一个基于JavaWeb技术构建的网站应用,主要采用了Struts2和Hibernate3两个框架进行集成开发。这两个框架在JavaWeb开发领域中占据了重要地位,它们为开发者提供了强大的功能,使得创建高效、可...
2. 关键字:Java的关键字是被语言保留的标识符,不能用作变量名、方法名等。题目中的 `null`, `true`, `main`, `extends` 是Java关键字,而 `NULL`, `instansof`, `sizeof` 不是。 3. 异常处理:在Java中,异常处理...
它允许开发者编写定制的SQL,通过XML或注解形式的映射配置,将SQL与Java对象(POJOs)关联起来。这样,开发者可以专注于业务逻辑,同时自由地控制数据库交互。 【iBATIS的准备工作】 要开始使用iBATIS,首先需要...
【标题】"graduate:毕业设计--基于某公司的招聘系统"是一个综合性的项目,它利用了Java后端技术栈来构建一个完整的招聘管理平台。这个系统旨在帮助公司更有效地进行人才招聘,提供便捷的岗位发布、简历筛选、面试...
DB2是IBM公司推出的一款关系型数据库管理系统,广泛应用于各类企业级应用环境中。本文档主要介绍了DB2的几个重要版本及其特点。 ##### 1. DB2产品版本 - **DB2 Everyplace**:针对移动设备设计,支持多种移动操作...
首先,ASP.NET是微软公司推出的一种Web应用程序框架,它基于.NET Framework,为开发者提供了构建动态网站、Web应用和服务的强大工具。ASP.NET支持多种编程模型,如ASP.NET Web Forms、ASP.NET MVC和ASP.NET Core,本...
解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A) 34.面向对象的语言具有________性、_________性、________性 答:封装、继承、多态。 35.能用foreach遍历访问的...
JSTL是SUN公司定义的JSP标准标签库,它源于Apache Jakarta小组对常见WEB应用问题的总结和解决方案。JSTL的出现是为了消除不同厂商自定义标签之间的混乱,提供一套通用、标准化的标签集,使得开发者能够在不同的WEB...
C#是微软公司开发的一种面向对象的编程语言,它以其强大的.NET框架为基础,广泛应用于各种软件开发,尤其是Windows平台的应用。在C#中处理SQL数据库,通常会利用ADO.NET库,这使得C#与SQL Server等数据库系统之间的...
J2EE(Java 2 Platform, Enterprise Edition)是 Sun Microsystems 公司推出的一套多层分布式企业应用模型标准,主要用于构建大规模、分布式的企业级应用系统。 - **多层结构**:J2EE 支持多层架构设计,允许开发者...
MyBatis允许开发者编写SQL语句,通过XML或注解的方式将SQL与Java代码绑定,从而避免了传统的JDBC代码的繁琐。它支持动态SQL,可以更灵活地处理复杂查询,同时提供了一种方便的映射机制,将数据库查询结果自动转化为...
3. **Android应用开发**:Android Studio的使用、Activity和Fragment的管理、Intent传递、布局设计(XML与编程动态创建)、数据持久化(SQLite数据库、SharedPreferences、文件存储)、网络请求(如Retrofit、Volley...
SQL Server 2005是微软公司推出的一款关系型数据库管理系统,它在企业级数据管理、分析和报告方面扮演着重要角色。本系列课程将深入探讨SQL Server 2005的各项核心功能和特性,旨在帮助学习者掌握该系统的使用和优化...
Oracle 10g数据库系统是Oracle公司发布的一个版本,提供了丰富的功能和强大的性能。在数据库管理中,有时候我们需要查找所有包含特定字段的表,这对于数据治理、数据分析或优化查询性能非常有帮助。以下是如何在...
该移动公司清单查询系统是一个基于C#编程语言,利用Visual Studio 2008 IDE以及SQL Server 2008数据库进行开发的应用程序。开源性质意味着源代码是公开的,开发者可以自由查看、学习和修改代码,这对于初学者或者...