Re: Creating Query from Many Parameters
Muggle
can you tell me how you are reading the xml file and converting the
objects in java?
I used Xpath.But the problem is you are using jdk1.4 and the package
javax.xml.xpath is with java5.Please see http://java.sun.com/developer/
technicalArticles/xml/validationxpath/.
Since you are already running the code so I am assuming you can query
the xml file.If you face problems please revert back.
=================================
Here's my logic:I am putting the details in a bean.Am storing the date
in a string array with constant width 2 as your xml file shows.But if
its changing then use growable arrays e.g Vector,ArrayList.
I am putting hobbies and food in a vector as those can change in
length.
I am pasting the code.See if it is of any help to you...........
The ouput was-->SELECT * FROM EMP
where name like Dav*
and DOB between 1960-01-01 and 1963-09-09
and hobby in'Dance','Soccer'
and food in'Beef','Fish'
and state =NY
******************************************************************************************
/*
* Created on Jan 31, 2007
*/
package help.Muggle;
import java.util.Vector;
/**
* @author Jboss
*/
public class Emp_Dtls {
String name;
String state;
Vector hobbies;
Vector Food;
String[] dob;
String[] another_Date;
public Emp_Dtls() {
hobbies = new Vector();
Food = new Vector();
dob = new String[2]; //since only 2 values From and To
another_Date = new String[2]; //since only 2 values From and To
}
/**
* @return String
*/
public String getName() {
return name;
}
/**
* @return String
*/
public String getState() {
return state;
}
/**
* @param String
*/
public void setName(String string) {
name = string;
}
/**
* @param string
*/
public void setState(String string) {
state = string;
}
public void populateDOB(String str1, String str2) {
dob[0] = str1;
dob[1] = str2;
}
public void populateAnother_Date(String str1, String str2) {
another_Date[0] = str1;
another_Date[1] = str2;
}
public void populateFood(String str) {
Food.add(str);
}
public void populateHobbies(String str) {
hobbies.add(str);
}
}
/*
* Created on Jan 31, 2007
*/
package help.Muggle;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
/**
* @author Jboss
*/
public class Test_Muggle {
public static void main(String[] args) {
Emp_Dtls empDtls = new Emp_Dtls();
XPath xp = XPathFactory.newInstance().newXPath();
InputSource inp = new InputSource("C:/Muggle/Request.xml");
try {
//store the name
//XML query string
String expr = "/Request/Name";
String name =
(String) xp.evaluate(expr, inp, XPathConstants.STRING);
System.out.print("\n name is " + name);
empDtls.setName(name);
// Store DOB
//query String
expr = "/Request/DOB/From";
String dobFrom =
(String) xp.evaluate(expr, inp, XPathConstants.STRING);
//query String
expr = "/Request/DOB/To";
String dobTo =
(String) xp.evaluate(expr, inp, XPathConstants.STRING);
System.out.print("\n dob" + dobFrom + "\t" + dobTo);
empDtls.populateDOB(dobFrom, dobTo);
//Store Another date
//repeat the above process
//store Hobby
//query
expr = "/Request/Hobby/Value";
NodeList hobbies =
(NodeList) xp.evaluate(expr, inp, XPathConstants.NODESET);
System.out.print("\n size" + hobbies.getLength());
for (int i = 0; i < hobbies.getLength(); i++) {
Node currNode = hobbies.item(i);
empDtls.populateHobbies(
currNode.getFirstChild().getNodeValue());
System.out.print(
"\n val node" + currNode.getFirstChild().getNodeValue());
}
//store Food
// query
expr = "/Request/Food/Value";
NodeList food =
(NodeList) xp.evaluate(expr, inp, XPathConstants.NODESET);
System.out.print("\n size" + food.getLength());
for (int i = 0; i < food.getLength(); i++) {
Node currNode = food.item(i);
empDtls.populateFood(currNode.getFirstChild().getNodeValue());
System.out.print(
"\n val node" + currNode.getFirstChild().getNodeValue());
}
//for state
expr = "/Request/State";
String state =
(String) xp.evaluate(expr, inp, XPathConstants.STRING);
System.out.print("\n" + state);
empDtls.setState(state);
String hobby_val = "";
for (int i = 0; i < empDtls.hobbies.size(); i++) {
hobby_val =hobby_val+"'"+ empDtls.hobbies.get(i) +"'"+ ",";
}
hobby_val = hobby_val.substring(0, hobby_val.length()-1);
String food_val = "";
for (int i = 0; i < empDtls.Food.size(); i++) {
food_val = food_val +"'"+ empDtls.Food.get(i) +"'"+ ",";
}
food_val = food_val.substring(0, food_val.length()-1);
// now form the string
String operator = name.contains("*") ? "like" : "=";
String appnd1 = "\r where name \t" + operator +
"\t"+empDtls.getName();
String appnd2 =
"\r and DOB between \t"
+ empDtls.dob[0]
+ "\t and \t"
+ empDtls.dob[1];
String appnd3 = "\r and hobby in" + hobby_val;
String appnd4 = "\r and food in" + food_val;
String appnd5 = "\r and state =" + state;
String sql =
"SELECT * FROM EMP "
+ appnd1
+ appnd2
+ appnd3
+ appnd4
+ appnd5;
System.out.print("\n sql" + sql);
} catch (XPathExpressionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}