|
From: SVN by r. <sv...@ca...> - 2009-12-15 20:48:22
|
Author: roy
Date: 2009-12-15 21:48:09 +0100 (Tue, 15 Dec 2009)
New Revision: 434
Modified:
src/main/java/nl/improved/sqlclient/commands/ReadCommand.java
Log:
some fixes in reading large files (threading issues)
Modified: src/main/java/nl/improved/sqlclient/commands/ReadCommand.java
===================================================================
--- src/main/java/nl/improved/sqlclient/commands/ReadCommand.java 2009-12-15 08:58:40 UTC (rev 433)
+++ src/main/java/nl/improved/sqlclient/commands/ReadCommand.java 2009-12-15 20:48:09 UTC (rev 434)
@@ -12,10 +12,12 @@
import java.sql.Types;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import java.util.Vector;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
-import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
@@ -89,6 +91,7 @@
if (info.name.equals("row")) {
if (!query.endsWith(")")) {
query = query + values + ")";
+ //output(query);
pstmt = c.prepareStatement(query);
}
for (int i = 0; i < valuesList.size() ; i++) {
@@ -106,20 +109,22 @@
if (rowCount % 100000 == 0) {
if (autoCommit) {
pstmt.getConnection().commit();
- output(Integer.toString(rowCount)+" rows comitted");
+ //output(Integer.toString(rowCount)+" rows comitted");
} else {
- output(Integer.toString(rowCount)+" rows inserted");
+ //output(Integer.toString(rowCount)+" rows inserted");
}
}
}
if (info.name.equals("col")) {
if (!query.endsWith(")")) {
if (values.endsWith("?")) {
+ query +=",";
values+=",";
}
+ query+= info.atts.get("name");
values += "?";
}
- String typeString = info.atts.getValue("type");
+ String typeString = info.atts.get("type");
if (typeString.equals("date")) {
String nodeValue = content;
if (nodeValue == null || nodeValue.equals("")) {
@@ -127,9 +132,9 @@
} else {
try {
//pstmt.setDate(colNr + 1, new Date(formatter.parse(nodeValue).getTime()));
- valuesList.add(new Date(formatter.parse(nodeValue).getTime()));
+ valuesList.add(new Date(formatter.parse(nodeValue.replace("\n", "").trim()).getTime()));
} catch (ParseException ex) {
- throw new IOException("Failed to parse date :"+ nodeValue);
+ throw new IOException("Row: "+ rowCount+" Failed to parse date :"+ nodeValue);
}
}
} else if (typeString.equals("binary")) {
@@ -164,21 +169,25 @@
valuesList.add(nodeValue);
}
} catch(Exception e) {
- valuesList.add(nodeValue);
+ throw new IllegalArgumentException("Row :"+ rowCount +": Warning invalid type read: '" + typeString+"'");
}
}
}
}
};
- reader.setContentHandler(contentHandler);
- //parser.parse(new File(fileName), new DefaultHandler());
- parser.parse(new File(fileName), (DefaultHandler)null);
+ //reader.setContentHandler(contentHandler);
+ parser.parse(new File(fileName), contentHandler);
+ int rowCount= contentHandler.rowCount;
contentHandler = null;
- return new SimpleCommandResult(true, "Read from " + fileName + " done. (" + contentHandler.rowCount + " rows imported)");
+ return new SimpleCommandResult(true, "Read from " + fileName + " done. (" + rowCount + " rows imported)");
} catch (AbortException e) {
- return new SimpleCommandResult(true, "Read from " + fileName + " aborted. (" + contentHandler.rowCount + " rows imported)");
+ int rowCount= contentHandler.rowCount;
+ contentHandler = null;
+ return new SimpleCommandResult(true, "Read from " + fileName + " aborted. (" + rowCount + " rows imported)");
} catch (Exception e) {
- throw new IllegalStateException("Failed to read dump (" + fileName + "): " + e.toString(), e);
+ int rowCount= contentHandler.rowCount;
+ contentHandler = null;
+ throw new IllegalStateException("Row: "+ rowCount+" Failed to read dump (" + fileName + "): " + e.toString(), e);
}
}
@@ -215,13 +224,13 @@
@Override
public boolean backgroundProcessSupported() {
- return true;
+ return false;
}
- private static abstract class ReadCommandContentHandler implements ContentHandler {
+ private static abstract class ReadCommandContentHandler extends DefaultHandler {
int rowCount = 0;
- private List<ElementInfo> nameTree = new ArrayList<ElementInfo>();
+ private List<ElementInfo> nameTree = new Vector<ElementInfo>();
private StringBuffer content;
private boolean failed = false;
private final String fileName;
@@ -232,35 +241,43 @@
}
+ @Override
public void setDocumentLocator(Locator locator) {
}
+ @Override
public void startDocument() throws SAXException {
nameTree.clear();
content = new StringBuffer();
}
+ @Override
public void endDocument() throws SAXException {
nameTree.clear();
}
+ @Override
public void startPrefixMapping(String prefix, String uri) throws SAXException {
}
+ @Override
public void endPrefixMapping(String prefix) throws SAXException {
}
+ @Override
public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
nameTree.add(new ElementInfo(qName, atts));
+ content = new StringBuffer();
if (abort) {
throw new AbortException();
}
}
+ @Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if (nameTree.get(nameTree.size()-1).name.equals(qName)) {
try {
- handleElement(nameTree.remove(nameTree.size() - 1), content.toString());
+ handleElement(nameTree.remove(nameTree.size() - 1), "");//content.toString());
} catch (SQLException e) {
throw new IllegalStateException("Failed to execute update query for dump(" + fileName + "): " + e.toString(), e);
} catch (IOException e) {
@@ -274,50 +291,44 @@
public abstract void handleElement(ElementInfo info, String content) throws SQLException, IOException;
+ @Override
public void characters(char[] ch, int start, int length) throws SAXException {
- content.append(ch, start, length);
+ if (nameTree.get(nameTree.size()-1).name.equals("col")) {
+ content.append(ch, start, length);
+ }
}
+ @Override
public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
- content.append(ch, start, length);
+ //content.append(ch, start, length);
}
+ @Override
public void processingInstruction(String target, String data) throws SAXException {
- throw new UnsupportedOperationException("Not supported yet.");
+ System.err.println("Not supported yet.");
}
+ @Override
public void skippedEntity(String name) throws SAXException {
- throw new UnsupportedOperationException("Not supported yet.");
+ System.err.println("Not supported yet.");
}
}
private static class ElementInfo {
private final String name;
- private final Attributes atts;
+ private final Map<String, String> atts;
- public ElementInfo(String name, Attributes atts) {
+ public ElementInfo(String name, Attributes attributes) {
this.name = name;
- this.atts = atts;
+ atts = new HashMap<String, String>();
+ for (int i= 0; i < attributes.getLength(); i++) {
+ atts.put(attributes.getLocalName(i), attributes.getValue(i));
+ }
}
}
private static class AbortException extends RuntimeException {
}
-
- public static void main(String[] args) throws Exception {
- final String fileName = args[0];
- SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
- XMLReader reader = parser.getXMLReader();
- reader.setFeature("http://xml.org/sax/features/validation", false);
- reader.setContentHandler(new ReadCommandContentHandler(fileName) {
- @Override
- public void handleElement(ElementInfo info, String content) throws SQLException, IOException {
- System.out.println(info.name);
- }
- });
- //parser.parse(new File(fileName), new DefaultHandler());
- parser.parse(new File(fileName), (DefaultHandler)null);
- }
}
|