Daten aus DB in XML-Datei schreiben

Wenn du mit Ant baust, hat der eclipse classpath keinen Einfluss darauf. Schau mal in der Ant Dokumentation. Ich nehmen an du benutzt den java Task? Dort gibt es Beispiele wie man den classpath angeben muss. Ansonsten poste mal wie deine build.xml ausschaut.

Allerdings musst du unter eclipse zum starten auch kein Ant verwenden. Mit Run As Java Application läuft das auch so.
 
Ich woltle es tatsächlich etwas professioneller gestalten mit Ant, obwohl ich eigentich davon nicht die große Ahnung habe. Deswegen nutze ich es.

Also meine Applikation läuft tatsächlich. Danke erst einmal dazu. Jetzt würde ich nur noch gerne das ganze mit Ant verfollständigen.

<project name="ProfessorenInformationsSystem" default="compile" basedir=".">
<target name="prepare">
<mkdir dir="build"/>
</target>

<target name="clean" description="Clean up">
<delete dir="build"/>
<delete file="lehrende.xml"/>
</target>

<target name="compile" depends="prepare" description="Compile">
<javac srcdir="src" destdir="build"/>
</target>

<target name="run" description="Run program">
<java classname="createXML" classpath="jdbc" fork="true"/>
</target>
</project>

ich habe einen ordner jdbc erstlelt und die mysql-connector-java-5.1.8-bin dort reingestellt. Diesen haben ich als classpath mitgegeben.

Leider läuft es aber immer noch nicht. Irgendeine Idee was ich noch falsch mache ?
 
Nenn den Ordner mal am Besten lib. So macht man das meist in Java-Projekten und schmeißt da alle Jars rein die man zusätzlich benötigt.

Versuch mal das entsprechend:

XML:
<target name="run" description="Run program">
  <java classname="createXML" fork="true">
    <classpath>
        <fileset dir="lib">
          <include name="**/*.jar"/>
        </fileset>
    </classpath>
  </java>
</target>

Siehe auch
http://ant.apache.org/manual/CoreTasks/java.html
und dort dem Path Like Structure Link bei Classpath folgen.
 
Zuletzt bearbeitet von einem Moderator:
Nochmals vielen Dank. Also ich habe das ganze mal durchgespielt und nach der Anpassung bekomme ich den folgenden Fehler

Code:
      java.lang.NoClassDefFoundError: createXML
      Caused by: java.lang.ClassNotFoundException: createXML
      	at java.net.URLClassLoader$1.run(Unknown Source)
      	at java.security.AccessController.doPrivileged(Native Method)
      	at java.net.URLClassLoader.findClass(Unknown Source)
      	at java.lang.ClassLoader.loadClass(Unknown Source)
      	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
      	at java.lang.ClassLoader.loadClass(Unknown Source)
      	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
      Could not find the main class: createXML.  Program will exit.
      Exception in thread "main" 
      Java Result: 1

createXML.class wird aber in /build/ generiert.
 
wie sagt man so schön, ich stehe heute irgendwie aufm schlauch und nichts geht.

Also ich habe mich nochmal mit Ant ein wenig beschäftigt und nachträglich Ant einzeln heruntergeladet. Das kuriose ist, Ant hat unter Eclipse ja auch so funktioniert. Eigentlich kann es daran ja nicht liegen. . Aber da ich mir nicht mehr anders zu helfen weiß ...

Also habe ich nochmal Ant heruntergeladen und %Ant_Home% festgelegt. %JAVA_HOME% hatte ich vorher schon festgelegt. Als KLassenpfade habe ich %ANT_HOME%/bin und %JAVA_HOME%/bin hinzugefügt. Aber auch das hat nicht geholfen. Ich verstehe es so, dass die compilierte Klasse -> XMLcreate.class nicht gefunden wird. Deswegen habe ich sogar den Klassenpfad in den Umgebungsvariablen mal an .... /build/ angepasst, aber auch das hat nicht geholfen. Das liegt wohl daran, dass Ant garnicht darauf zugreift.

Ich weiß wirklich nicht mehr weiter und wäre für jede Hilfe dankbar ... Danke
 
Ja richtig. Du musst schon noch das Verzeichnis wohin du compilierst (build) hinzufügen.

Sollte so gehen:
<pathelement location="build"/>

Steht so zumindest in dem Link den ich dir im letzten Post gegeben hatte.
 
Hi,

erst einmal vielen Dank, du hast mir sehr geholfen. Es klappt jetzt ^^.

Ich habe nur ein letztes kleines Problem. Ich möchte keine Tag einlesen, wo keine Daten drin enthalten sind. in der XML Datei sollen hinterher nicht solche tags :</img src=" "/> sondern garnicht erst angezeigt werden.

Code:
import java.sql.*;
import java.io.*;

public class createXML {
	public static void main(String[] args)throws Exception {
		
		Connection con = null;
		
		try {
			String url = "jdbc:mysql://localhost/hsnr";
			String driver = "com.mysql.jdbc.Driver";
			String user = "root";
			String password = "jinzhosse";

			Class.forName(driver);

			con = DriverManager.getConnection(url, user, password);
			
			Statement stmt = con.createStatement();
			String sql = "Select* from dozenten inner join lehrgebiete on dozenten.lid = lehrgebiete.lid";
			ResultSet rs = stmt.executeQuery(sql);
			
			BufferedWriter bw = new BufferedWriter (new FileWriter("lehrende.xml"));
			bw.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\r");	
			bw.write("<lehrende>");
			while (rs.next()){
				bw.write("<person>");
				bw.write("<titel>");
				String titel = rs.getString("Titel");
				bw.write(titel);
				bw.write("</titel>"); 
				bw.write("<vorname>");
				String vorname = rs.getString("Vorname");
				bw.write(vorname);
				bw.write("</vorname>");
				bw.write("<nachname>");
				String nachname = rs.getString("Nachname");
				bw.write(nachname);
				bw.write("</nachname>"); 
				bw.write("<lehrgebiet>");
				String lehrgebiet = rs.getString("Lehrgebiet");
				bw.write(lehrgebiet); 
				bw.write("</lehrgebiet>"); 
				bw.write("<website>");
				String website = rs.getString("Website");
				bw.write(website); 
				bw.write("</website>"); 
				bw.write("<room>");
				String room = rs.getString("Buero");
				bw.write(room); 
				bw.write("</room>"); 
				bw.write("<email>");
				String email = rs.getString("Email");
				bw.write(email);
				bw.write("</email>"); 
				bw.write("<tel>");
				String telefon = rs.getString("Telefon");
				bw.write(telefon);
				bw.write("</tel>"); 
				bw.write("<fax>");
				String fax = rs.getString("Fax");
				bw.write(fax);
				bw.write("</fax>"); 
				bw.write("<img src='");
				String img = rs.getString("Img");
				bw.write(img);
				bw.write("'/>"); 
				bw.write("</person>\n\r");		
			}				
			bw.write("</lehrende>\n\r");
			
			con.close();
			bw.close();
			rs.close();
			stmt.close();

		}
		finally {
			try {
				if (con != null)
					con.close();
			}
			catch (Exception e) {
				System.err.println(e);
			}
		}
	}
}

Ich lese ja die Daten aus dem Resultset aus. und schreibe vorher die tags für die XML Datei. Mit einer IF-Abfrage müsste das doch irgendwie zu realisieren sein.


Ich hatte an eine eine If abfrage gedacht:

if rs.getString("Img") =null then doNothing und Springzumnächsten Tag..

Ich habe mal wieder viel nachgelesen aber nichts gefunden. Habt ihr vielleicht eine idee
 
Wie wärs mit:

Java:
private void addTag(BufferedWriter bw, String tagName, String value) {
   if(value != null){
      bw.write("<"+tagName+">");
      bw.write(value);
      bw.write("</"+tagName+">");
   }
}

Java:
addTag(bw,"titel",rs.getString("titel"));
 

Neue Beiträge

Zurück