# Dom Parser und SQLite füllen



## uppss (12. Jan 2015)

Hallo,

ich lese einige Inhalte aus einer XML-Date mit Hilfe der DOM-Technologie.
Wenn ich diese Inhalte dann ausgeben möchte, funktioniert super.
Wenn ich aber diese Inhalte in DB (sqlite) abspeichern möchte, werden nur die Variablen gespeichert und nicht die Inhalte.
Da kann mir bestimmt jemand helfen.
Ich habe sehr wenig Erfahrung mit java, das liegt bestimmt daran.

Vielen Dank im Voraus
Daniel

z.B. xml

```
<?xml version="1.0" encoding="UTF-8"?>
<NISP xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="nisp73.xsd"><ETEST>
   <HEAD>
      <vin>Wefefefefw0356</vin>
      <RELEASEID>RC2ewffscsd00 39</RELEASEID>
      <PRODNO>74535341</PRODNO>
      <RESULT>NOK</RESULT>
      <ISID>62226</ISID>
      <DATE>20140908</DATE>
	</HEAD>
</ETEST></NISP>
```


```
import java.io.File;
import java.io.IOException;
 
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
 
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
 
public class xmlReader {
 
	/**
	 * @param args
	 * @throws ParserConfigurationException
	 * @throws SAXException
	 * @throws IOException
	 */
	public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
 
		// Parse XML file
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder documentBuilder = factory.newDocumentBuilder();
		Document doc = documentBuilder.parse(new File("resultdata.xml"));
 
		String titleEl = doc.getDocumentElement().getNodeName();
		System.out.println("Title = " + titleEl);
 
		NodeList nodeList = doc.getElementsByTagName("HEAD");
 
		String vin = ""; 
 
		System.out.println("\tAlle Daten:");
 
		for(int i = 0; i < nodeList.getLength(); i++) {
			Element element = (Element)nodeList.item(i);
			vin = element.getElementsByTagName("vin").item(0).getChildNodes().item(0).getNodeValue();
 
			System.out.println(vin); // hier wird Inhalt aus der xml-Dat. angezeigt
 
		}
	}
}
```

und abspeichern in DB

```
.
.
.
oben
.
.
Connection c = null;
			Statement stmt = null;
			try {
				Class.forName("org.sqlite.JDBC");
				c = DriverManager
						.getConnection("jdbc:sqlite:C:\\Users\\name\\Desktop\\workspace_eclipse\\System\\db\\System.sqlite");
				c.setAutoCommit(false);
				System.out.println("Opened database successfully");

				stmt = c.createStatement();
				String sql = "INSERT INTO TrackingSystem (Fehlerbeschreibung) "
						+ "VALUES ('vin');"; // Hier wird Variable "vin" in db geschrieben
				System.out.println("fzgIntNr" + " = " + vin); // hier wird Inhalt aus der xml-Dat. angezeigt
				stmt.executeUpdate(sql);

stmt.close();
				c.commit();
				c.close();
			} catch (Exception e) {
				System.err.println(e.getClass().getName() + ": "
						+ e.getMessage());
				System.exit(0);
			}
			System.out.println("Records created successfully");

		}
	}
}
```


----------



## Joose (12. Jan 2015)

uppss hat gesagt.:


> Wenn ich aber diese Inhalte in DB (sqlite) abspeichern möchte, werden nur die Variablen gespeichert und nicht die Inhalte.
> Da kann mir bestimmt jemand helfen.
> 
> 
> ...



Da du hier *vin* unter Hochkomma stehen hast wird das als Wert interpretiert, außerdem steht *vin* innerhalb eines Strings und kann dort nicht als Variable gesehen werden! Somit kann nur "vin" inder DB stehen.
Du musst natürlich den String richtig zusammensetzen mit dem + Operator.

Noch besser wäre es natürlich du verwendest PreparedStatements


----------



## uppss (13. Jan 2015)

Vielen Dank, hab's hinbekommen!


```
try {
			String query = "INSERT INTO TrackingSystem (Fehlerbeschreibung) values(?)";
			PreparedStatement pst = connection.prepareStatement(query);
			pst.setString(1, vin);
			pst.execute();
			JOptionPane.showMessageDialog(null, "Data Saved");
			pst.close();

		} catch (Exception x) {
			x.printStackTrace();
		}
```


----------



## dzim (13. Jan 2015)

Btw. Klassnamen werden in CamelCase-Schreibweise geschrieben - als beginnen immer mit einem grossen Buchstaben. Reguläre Variablen werden in der mit einem kleinen Buchstaben beginnenden camelCase-Schreibweise benannt 

(Ausnahmen sind *static final*s (immer Gross und Worte mit "*_*" getrennt) und - wenn man mag auch *static*s (manche verwenden hier kleine Worte und Underscores - ich verwende dort eigentlich immer die reguläre Schreibweise)).


----------



## Joose (13. Jan 2015)

dzim hat gesagt.:


> Btw. Klassnamen werden in CamelCase-Schreibweise geschrieben - als beginnen immer mit einem grossen Buchstaben.



UpperCamelCase 



dzim hat gesagt.:


> Reguläre Variablen werden in der mit einem kleinen Buchstaben beginnenden camelCase-Schreibweise benannt



lowerCamelCase 

Um es jeweils mit einen Wort zu beschreiben


----------



## dzim (13. Jan 2015)

I see :-D


----------

