Reputation: 47
i am trying to extract value from web site and inserting value in my db when i am going to insert data in my db i am getting exeception
Exception is : Exception in thread "main" java.util.NoSuchElementException
here is my code
public class ScrapCom {
Statement st = null;
Connection cn = null;
public static void main(String args[]) throws InterruptedException, ClassNotFoundException, SQLException {
int j = 0;
WebDriver driver = new HtmlUnitDriver(BrowserVersion.getDefault());
String sDate = "27/03/2014";
String url = "http://www.upmandiparishad.in/commodityWiseAll.aspx";
driver.get(url);
Thread.sleep(5000);
new Select(driver.findElement(By.id("ctl00_ContentPlaceHolder1_ddl_commodity"))).selectByVisibleText("Jo");
driver.findElement(By.id("ctl00_ContentPlaceHolder1_txt_rate")).sendKeys(sDate);
Thread.sleep(3000);
driver.findElement(By.id("ctl00_ContentPlaceHolder1_btn_show")).click();
Thread.sleep(5000);
WebElement findElement = driver.findElement(By.id("ctl00_ContentPlaceHolder1_GridView1"));
String htmlTableText = findElement.getText();
// do whatever you want now, This is raw table values.
htmlTableText = htmlTableText.replace("S.No.DistrictMarketPrice", "");
htmlTableText = htmlTableText.replaceAll("\\s(\\d+\\s[A-Z])", "\n$1");
htmlTableText = htmlTableText.replaceAll("(?=(.*?[ ]){4,}).*?[\n\r]", "");
System.out.println(htmlTableText);
StringTokenizer str = new StringTokenizer(htmlTableText);
while (str.hasMoreElements()) {
for (int i = 0; i < 4; i++) {
String no = str.nextElement().toString();
String city = str.nextElement().toString();
String mandi = str.nextElement().toString();
String price = str.nextElement().toString();
Class.forName("com.mysql.jdbc.Driver");
Connection cn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mandi", "root", "");
//insert them into the database
PreparedStatement ps = cn.prepareStatement("insert into commoditywise values(?,?,?,?)");
ps.setString(1, no);
ps.setString(2, city);
ps.setString(3, mandi);
ps.setString(4, price);
j = ps.executeUpdate();
cn.close();
}
}
if (j == 1) {
System.out.println("data inserted");
} else {
System.out.println("not inserted");
}
driver.close();
driver.quit();
}
}
updated exception
Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(StringTokenizer.java:349)
at java.util.StringTokenizer.nextElement(StringTokenizer.java:407)
at Getdata1.main(Getdata1.java:48)
Java Result: 1
What am I missing here?
How can i remove this exception
Thanks in advance
Upvotes: 0
Views: 2136
Reputation: 51373
I guess your problem is not the db insert. You are using StringTokenizer.nextElement()
without testig if a next element is available.
while (str.hasMoreElements()) {
for (int i = 0; i < 4; i++) {
String no = str.nextElement().toString();
String city = str.nextElement().toString();
String mandi = str.nextElement().toString();
String price = str.nextElement().toString();
If you do multiple nextElement()
calls in a row you should first check if the expected token count is available by using StringTokenizer.countTokens()
public int countTokens()
Calculates the number of times that this tokenizer's nextToken method can be called > before it generates an exception. The current position is not advanced.
Returns: the number of tokens remaining in the string using the current delimiter set. See Also: nextToken()
Upvotes: 1