Dom Parser und SQLite füllen

uppss

Aktives Mitglied
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
Code:
<?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>

Java:
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
Java:
.
.
.
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");

		}
	}
}
 
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.

Java:
				String sql = "INSERT INTO TrackingSystem (Fehlerbeschreibung) "
						+ "VALUES ('vin');"; // Hier wird Variable "vin" in db geschrieben

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 🙂
 
Zuletzt bearbeitet:
Vielen Dank, hab's hinbekommen!

Java:
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();
		}
 
Zuletzt bearbeitet:
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 finals (immer Gross und Worte mit "_" getrennt) und - wenn man mag auch statics (manche verwenden hier kleine Worte und Underscores - ich verwende dort eigentlich immer die reguläre Schreibweise)).
 
Zuletzt bearbeitet:

Zurück
Oben