Hallo Leute,
ich habe ein Problem mit meinem Java-Projekt und bin langsam wirklich verzweifelt.
Ich suche nun schon seit 2 Wochen in alle mir bekannten Foren, komme aber einfach auf keine Lösung.
Ich greife über mein Programm eine XML-File in einem festen Order innerhalb meines Dateisystems ab, lese die einzelnen Tags aus und schreibe diese anschließend in eine SQL-Datenbank.
Führe ich das Programm in Eclipse aus funktioniert das auch problemlos. Sobald ich allerdings eine .jar Datei erstelle, um das Programm auch ohne Eclipse ausführen zu können, wird nichts mehr in meine Datenbank geschrieben.
Ich muss eine .jar erstellen, da das Programm später als Windows-Service laufen soll.
sqljdbc-Treiber ist installiert und auch in der JRE eingefügt.
Es tut mir leid das es so viel Code ist aber ich habe wirklich keine Ahnung wo mein Fehler liegt
Habe die Catch-Zweige geleert um die Menge etwas zu reduzieren. Dürfte ja nicht daran liegen, oder?
Sollte ich irgendwelche Infos vergessen haben oder einfach nur blind sein und ein solches Thema besteht bereits bitte ich vielmals um Entschuldigung.
Ich hoffe das ich mich einigermaßen verständlich ausgedrückt habe.
Vielen Dank für eure Hilfe.
ich habe ein Problem mit meinem Java-Projekt und bin langsam wirklich verzweifelt.
Ich suche nun schon seit 2 Wochen in alle mir bekannten Foren, komme aber einfach auf keine Lösung.
Ich greife über mein Programm eine XML-File in einem festen Order innerhalb meines Dateisystems ab, lese die einzelnen Tags aus und schreibe diese anschließend in eine SQL-Datenbank.
Führe ich das Programm in Eclipse aus funktioniert das auch problemlos. Sobald ich allerdings eine .jar Datei erstelle, um das Programm auch ohne Eclipse ausführen zu können, wird nichts mehr in meine Datenbank geschrieben.
Ich muss eine .jar erstellen, da das Programm später als Windows-Service laufen soll.
sqljdbc-Treiber ist installiert und auch in der JRE eingefügt.
Java:
import java.io.*;
import java.sql.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
public class xmlZuTxt {
static String Dateiname = null;
static String dp = "S:/.../DP/";
static String in = "S:/.../IN/";
static String out = "S:/.../OUT/";
static final String hostname = "DECPC4001\\SQLEXPRESS";
static final String dbname = "Test";
static final String connectionUrl = "jdbc:sqlserver://" + hostname
+ ";database=" + dbname + ";integratedSecurity=true;";
static Connection conn = null;
static boolean v = false;
static int count = 0;
public static void main(String[] args) throws IOException {
try {
for (int i = 0; i < 1; i++) {
Dateiname = listDir();
treiberLaden();
VerbindungAufbauen();
Auslesen(Dateiname, i);
INzuOUT(Dateiname); }
} catch (ArrayIndexOutOfBoundsException aioobe) {
} catch (IOException ioe) { }
}
public static void Auslesen(String a, int z)throws IOException {
try {
VerbindungAufbauen();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(quellDatei);
doc.getDocumentElement().normalize();
NodeList nl = doc.getElementsByTagName(a);
for (int i = 0; i < nl.getLength(); i++) {
Node n = nl.item(i);
if (n.getNodeType() == Node.ELEMENT_NODE) {
Element e = (Element) n;
String Heading = n.getNodeName();
String OrderID = e.getElementsByTagName("OrderID").item(i).getTextContent();
String Info1= e.getElementsByTagName("Info1").item(i).getTextContent();
String Info2= e.getElementsByTagName("Info2").item(i).getTextContent();
String ToolIDs = e.getElementsByTagName("ToolIDs").item(i).getTextContent();
if (OrderIDPrüfen(OrderID) == 0) {
// Überprüft ob die OrderID schon vorhanden ist, wenn nicht wird 0 zurückgegeben und diese If-Bedingung ist erfüllt
ToolIDs = ToolIDs.trim();
ToolIDs = ToolIDs.replaceAll("\t", "");
ToolIDs = ToolIDs.replaceAll("\n", "trenn");
String[] ToolIDfeld = ToolIDs.split("trenn");
for (int position = 0; position < ToolIDfeld.length; position++) {
if (ToolIDPrüfen(ToolIDfeld[position])) {
// Sobald eine der ToolIDs schon vorhanden ist, ist die If-Bedingung erfüllt und die Methode wird beendet
return;
}
}
count = 0;
for (String s : ToolIDfeld) {
String query = "INSERT INTO Test.dbo.OrderTool(OrderID,ToolID,count) VALUES('"+ OrderIDx + "','" + s + "','" + count + "')";
PreparedStatement stm = t.prepareStatement(query);
stm.execute();
stm.close();
count++;
// count wird erhöht
// und die Schleife wird erneut durchlaufen
}
PreparedStatement stmt = t.prepareStatement("INSERT INTO Test.dbo.OrderInfo(Heading,Info1,Info2) VALUES ('"+ Heading+ "','"+ Info1+ "','"+ Info2+ "')");
stm.execute();
stm.close();
} else if (OrderIDPrüfen(OrderID) > 0) {
// Überprüft ob die OrderID schon vorhanden ist, wenn ja wird ein Wert größer 0 zurückgegeben und die If-Bedingung ist erfüllt
ToolIDs = ToolIDs.trim();
ToolIDs = ToolIDs.replaceAll("\t", "");
ToolIDs = ToolIDs.replaceAll("\n", "trenn");
String[] ToolIDfeld = ToolIDs.split("trenn");
for (int position = 0; position < ToolIDfeld.length; position++) {
if (ToolIDPrüfen(ToolIDfeld[position])) {
return;
}
}
count = count + 1;
for (String s : ToolIDfeld) {
PreparedStatement stm = t.prepareStatement "INSERT INTO Test.dbo.OrderTool(OrderID,ToolID,count) VALUES('"+ OrderIDx + "','" + s + "','" + count + "')";
stm.execute();
stm.close();
count++;
}
PreparedStatement stmt = t.prepareStatement("INSERT INTO Test.dbo.OrderInfo(Heading,Info1,Info2) VALUES ('"+ Heading+ "','"+ Info1+ "','"+ Info2+ "')");
stmt.execute();
stmt.close();
}
}
}
} catch (FileNotFoundException fnfe) {
} catch (ParserConfigurationException pce) {
} catch (SAXException saxe) {
} catch (IOException ioe) {
} catch (SQLException sqle) {
}
}
public static void INzuOUT(String a) {
File quellDatei = new File(in + a + ".xml");
File zielDatei = new File(out + a + ".xml");
quellDatei.renameTo(zielDatei);
}
public static String listDir() {
String name;
File dir = new File(dp);
File[] files = dir.listFiles();
name = files[0].getName().substring(0,files[0].getName().lastIndexOf(46));
return name;
}
public static void treiberLaden() throws IOException {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException cnfe) { }
}
public static void VerbindungAufbauen() throws IOException {
try {
conn = DriverManager.getConnection(connectionUrl);
} catch (SQLException ex) {
}
return;
}
public static int OrderIDPrüfen(String w) throws IOException {
try {
String OrderID = w;
String query = "SELECT MAX(count) as maxcount FROM Test.dbo.OrderTool where OrderID = '" + OrderID + "' group by OrderID";
Connection t = DriverManager.getConnection(connectionUrl);
ResultSet rs = t.createStatement().executeQuery(query);
if (rs.next()) {
count = rs.getInt("maxcount");
} else {
count = 0;
}
} catch (SQLException sqle) {
} catch (IOException ioe) {
}
return count;
}
public static boolean ToolIDPrüfen(String w)throws IOException {
try {
String ToolID = w;
String query = "SELECT DISTINCT ToolID FROM Test.dbo.OrderTool where ToolID = '"+ ToolID + "'";
Connection t = DriverManager.getConnection(connectionUrl);
ResultSet rst = t.createStatement().executeQuery(query);
if (rst.next()) {
// ToolID vorhanden
v = true;
} else {
// ToolID nicht vorhanden
v = false;
}
} catch (SQLException sqle) {
return v;
}
Habe die Catch-Zweige geleert um die Menge etwas zu reduzieren. Dürfte ja nicht daran liegen, oder?
Sollte ich irgendwelche Infos vergessen haben oder einfach nur blind sein und ein solches Thema besteht bereits bitte ich vielmals um Entschuldigung.
Ich hoffe das ich mich einigermaßen verständlich ausgedrückt habe.
Vielen Dank für eure Hilfe.