****开发人员测试题
感谢参加**软件有限公司程序编写能力考试,请按照本文档要求编写相关的应用程序,并在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表示当update和delete该字段为操作的 where 条件 |
(XML1)
要求:
请按照上述的XML,编写一个JAVA组件,实现如下功能:
l 和前端的接口,接受前端程序提交的XML(XML1)。
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"
+ " 刘小小" + "
"
+ " "
+ " "
+ " " + " ";
return xml;
}
}
阅读(551) | 评论(0) | 转发(0) |