Zum Inhalt springen

CVS Importieren und in Datenbank mit Popup reinschreiben


Empfohlene Beiträge

Geschrieben

Hallöchen Ihr Experten!

Ich habe eine CVS-Datei, die ich mit HIlfe von Java in ein anderes Tool "importieren" soll.

Bei diesem Import soll wenn Daten von der CVS und der Datenbank nicht übereinstimmen ein PopUp erscheinen und fragen ob die daten überschrieben werden sollen oder nicht, wenn ja überschreiben udn wenn nein daten in einer Datei zwischenspeichern.

Am ende soll gefragt werden unter welchem Namen+Pfad die datei mit den abgelehnten differenzen zu speichern ist.

Leider kenn ich mich in Java so gut wie garnicht aus und würde mich freuen, wenn Ihr mir das ein oder andere Stichwort oder die ein oder andere Funktion nennen könntet, die ich brauchen könnte. Den bis jetzt habe ich noch keinen Ansatz :(

Um es vorher zu sagen udn nicht wieder Sprüche zu ernten: Ich möchte auf keinen Fall,, dass Ihr mir das Programm schreibt oder meine Arbeit macht, aber so ein Paar Eckpfeiler tun schon ganz gut, damit ich weiß wonach ich eigentlic im WWW suche, denn ich habe keine Buch und so zur Verfügung...

Danke schon ma an alle...

Geschrieben

Servus,

willst Du evtl. eine CSV-Datei verarbeiten? Bei CVS sollte Dich die CVS-Doku zum Dateiformat weiter bringen.

Ich gehe aber mal von CSV aus. :)

Du liest die Datei mit einem FileReader zeilenweise aus und zerlegst mit String#split die Zeile in ihre Bestandteile. Die Datenbank sprichst Du mit JDBC an und ermittelst die Daten. Vergleichen kannst du ja dann. Für die GUI arbeitest Du mit dem Package java.awt oder javax.swing und einem Tutorial Deiner Wahl. Das von Sun ist nicht schlecht (suchen musst Du selbst schnell).

Nachdem Du Dir das wahrscheinlich leichter vorstellst, als es - falls Du in Java noch nichts gemacht hast - ist, solltest Du mit einem Java Buch anfangen. Die gibts auch online: www.javabuch.de - Das Handbuch der Java-Programmierung oder "Java ist auch eine Insel" (-> google).

Bei Detailfragen einfach hier noch mal aufschlagen und gut.

Schöne Grüße,

Peter

Geschrieben

Hi,

Also erst ma: Ich stell es mir verdammt schwer vor und das ist das Problem...

Ich hab für das ganze Projekt (allein) 5 Tage Zeit... Und heute ist Tag 1... bis jetzt weiß ich grade mal, dass es JDBC gibt (nein es ist kein Abschlussprojekt). :eek

Es ist eine CSV Datei, da hab ich wohl irgendwie n Buchstabendreher drin.

Erst mal vielen Dank, aber ich sitze, wenn ich erlich bin immernoch vor einem Trümmerhaufen... aber ich werde mal zusehen, dass ich hier irgendwie auf nen grünen Zweig komme... nur noch seh ich das nicht... :(

Geschrieben

Hi,

Also fang erstmal ohne GUI an, einfach über die Kommando Zeile.

Dateien zeilenweise einlesen und schreiben, ist nicht schwer.

Dafür gibt es die Klasse java.util.Scanner oder vor Java 5 FileReader/FileWriter.

Einfach nach den Klassen googlen mit "Beispiel" oder "Example" oder "Howto" zusammen.

Wenn sichergestellt ist, das die Daten selber den Trenner nicht enthalten, kannste einfach mit der Methode String.split oder einem StringTokenizer arbeiten.

Sind die Daten teilweise gequotet, da der Trenner auch in den Daten vorkommen kann, wird es schwieriger. Eine mögliche Lösung findest du z.B. hier:

Koders - CSV.java

JDBC gibt es tausende Beispiele.

Woran du erkennst, ob die Daten Dubletten sind, kann dir nur jemand sagen der eure Daten kennt. Im einfachsten Fall sind in der csv die IDs der Datenbank mit drin und du musst nur die Spalten vergleichen.

Handelt es sich aber z.B. um Adressdubletten, ist das ganze schon deutlich schwieriger.

Ich hoffe das hilft dir etwas.

Gruß Jaraz

Geschrieben

Teilfrage:

Gibt es einen Dynamischen Mehrdimensionalen Array??

Zum einlesen der CSV habe ich:


import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;


public class Versuch2 {


	/**

	 * @param args

	 */

	final static int zeilen= 451 ;

	final static int spalten=93;

	public static String mein[][];


	public static void main(String[] args) {

		einlesenAusDatei();

		ausgeben();

	}


	public static void einlesenAusDatei() {


		try{

			  int zahl=0;

			  mein = new String[spalten][zeilen];

		      BufferedReader reader = new BufferedReader(new FileReader("C:\\cireport.csv"));


		      String strLine;

		      while ( (strLine = reader.readLine()) != null )

		      {

		        String[] items = strLine.split(";");


		        for (int it=0;it<items.length;it++){

		        	mein[it][zahl]=items[it];


		        }

		        zahl++;

		      }

		    }

		    catch(FileNotFoundException e) {}

		    catch(IOException e) {}	

	}


	public static void ausgeben(){


		for (int z=0;z<zeilen; z++){

			for (int s=0;s<spalten;s++){

				System.out.println("In der Zeile steht: "+ mein[s][z]);

			}

		}

	}


}

Geschrieben
Teilfrage:

Gibt es einen Dynamischen Mehrdimensionalen Array??

dafür nehmen wir z.b. ArrayList. die is zwar "eindimensional", aber wenn du noch eine arraylist in die arraylist steckst, dann hast du multidimensional.


ArrayList <ArrayList> multilist = new ArrayList<ArrayList>();

for(int i=0;i<100;i++){

//wir wollen uns strings merken:

multilist.add(new ArrayList<String>());

}

//nun hast du eine arraylist, die 100 arraylisten beinhaltet, die strings enthalten. einfach, oder .

//erste arraylist in der arraylist raussuchen:

ArrayList <String> firstList = multilist.get(0);

[/code]

bigredeyes

p.s. stehen pro zeile da 93 werte drin?

Geschrieben
p.s. stehen pro zeile da 93 werte drin?

japp, warum?

Ich guck mir ma ebn den code an *g*

edit:

Ich weiß ja, dass ich pro zeile 93 werte habe, aber ich weiß nicht wie viele zeilen, muss ich nicht bei deinem code schon die zeilenzahl wissen?

Geschrieben

Jepp. Dynamische mehrdimensionale Felder sind möglich:

int[][] multiDim = new int[10][];

for(int i = 0; i < 10; i++) {

  multiDim[i] = new int[i*2];

  for(int j = 0; j < i*2; j++) {

    multiDim[i][j] = i*j;

  }

}

Bleistiftsweise. Das Problem bei Deinem Anwendungsfall: Du kennst die Zahl der Zeilen erst nach dem Auslesen der Datei. Daher ist dies nicht anwendbar und Du mußt auf die ArrayList zurückgreifen. Und die Zeilenzahl mußt Du in bigredeyes' Code nicht kennen. Du kannst ja die multilist mit 93 ArrayLists belegen. Die erste Dimension stellt also die Spalten dar.

Geschrieben

Servus,

die Lösung mit verschachtelten Collections oder Arrays mag funktionieren, sie sollte aber nicht verwendet werden. Du hast ein oder mehrere fachliche Objekte. Diese haben scheinbar insgesamt 93 Attribute. Deshalb kannst Du die ja auch so definieren, also eine oder mehrere Klassen mit den insgesamt 93 Attributen. Dann kannst Du jedes dieser "Zeilenobjekte" ganz normal in einer Collection ablegen und damit arbeiten. Ansonsten blickst Du da früher oder später nicht mehr durch.

Schöne Grüße,

Peter

Geschrieben

Irgendwie ist es entweder zu spät oder ich zu dusselig *g*

Ich habe noch nie mit Arraylists gearbeitet muss ich zugeben.

Und ich kann mir im moment auch nicht vorstellen, wie ich wenn ich die zeile einlese das in die verschiedenen arraylists immer an die richtige stelle bekomme und so...

ich muss nachher ja genau auf das richtige auch zugreifen können...

Geschrieben

Also...

Ich habe jetzt eine class Item wo alles schon drin steht wie z.b.

String InventarnummerItemShortcode;

		String Hostname;

.

.

.

.

93 Strings Jetzt versuch ich das irgendwie einzubauen... So wie es ist ist es falsch... Aber ich weiß nicht, wie ich das hinbekommen soll. Problem ist einfach, das es so speziell ist, das man auch schon keine Beispiele mehr finden kann. Muss ich bei dem list add dann alle 96 teile einzeln aufrufen und füllen??
public static void main(String[] args) {

		ArrayList list = new ArrayList(Item);


		BufferedReader reader = new BufferedReader(new FileReader("C:\\cireport.csv"));


	    String strLine;

	    while ( (strLine = reader.readLine()) != null )

	     {

	       String[] items = strLine.split(";");


	    	   list.add(new Item(items));

	      }



		for(Iterator iter =list.iterator();iter.hasNext(){

			Item p = (Item)iter.next();

			System.out.println(p);

		}


	}[/code]

Geschrieben

Du willst folgendes machen.

List list = new ArrayList();

// über alle Zeilen iterieren und alle Zeilen nach row[] splitten

Item item = new Item();

item.setAttr1(row[0]);

item.setAttr2(row[1]);

item.setAttr3(row[2]);

item.setAttr4(row[3]);

...

list.add(item);

// Ende Schleife.

Du setzt also einfach alle Deine Attribute in der Klasse Item und packst dieses Objekt dann in die ArrayList (oder eine andere Collection Deiner Wahl).

Dann hast Du am Schluss eine Liste (indexbasiert, wo Du auf die einzelnen Zeilen zugreifen kannst und über die entsprechenden get-Methoden Deiner Klasse auf die Attribute. Die kannst Du jetzt vergleichen.

Peter

Geschrieben
Also...

Ich habe jetzt eine class Item wo alles schon drin steht wie z.b.

String InventarnummerItemShortcode;

		String Hostname;

.

.

.

.

93 Strings Jetzt versuch ich das irgendwie einzubauen... So wie es ist ist es falsch...
die klasse mit den 93 attributen ist gut. auch wenn das schon fast wieder bissl tu much ist... welche der attribute sind wichtig? mußt du alle miteinander vergleichen? oder nur ein paar? so wie ich es sehe hat dein "Item" ein konstruktor "Item(String[] parts)", oder? das ist schon mal ne feine sache. vielleicht willst du deine item-klasse auch noch mal in code-tags hauen und hier reinstellen.
Aber ich weiß nicht, wie ich das hinbekommen soll. Problem ist einfach, das es so speziell ist, das man auch schon keine Beispiele mehr finden kann. Muss ich bei dem list add dann alle 96 teile einzeln aufrufen und füllen??
wenn du dir einen Item(String[] parts)-konstruktor gebaut hast, dann würde das so laufen.


class Item{


private String name;

private String strasseUndHausnummer;

private String nameDerGeliebten



//hier wird dann der gesplittete string übergeben

public Item(String[] parts){

   name = parts[0];

   strasseUndHausnummer = parts[1];

   nameDerGeliebten = parts[55];

}


public String getName(){

   return name;

}


@override

public String toString(){

   return name+" "+nameDerGeliebten+" sollten sich nicht erwischen lassen!";

}


hoffe nicht verwirrt zu haben ;)

bigredeyes

p.s.

So wie es ist ist es falsch...

ist etwas schwierig zu verstehen! was geht nicht? was für eine exception wurde geworfen? oder compliert er erst gar nicht? -> bitte ausführliche fehlermeldungen.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...