# Java und Textfile



## Freaky Lady (14. Nov 2006)

Lese mit einer Java-Klasse Daten aus einem .txt-File raus und zerlege es mit dem StringTokenizer, dann siehts so aus:
'1''Hans''Muster'
'2''Birgit''Muster'

Nun sollten diese daten zur DB geschickt werden und als Einträge speichern. 

Das hab ich geschafft, ist aber noch nicht richtig und gibt das Resultat nur auf der Konsole aus...



> package keywords;
> 
> import java.io.BufferedReader;
> import java.io.File;
> ...



Und dies sieht auf der Konsole so aus:



> insert into Adresse (VORNAME, NACHNAME) values('1''Hans''Muster'
> insert into Adresse (VORNAME, NACHNAME) values(''2''Birgit''Muster'



Nun möchte ich nur die Vornamen und Nachnamen zur DB schicken, wie mach ich das ? Kann mir da jemand helfen ????


----------



## Leroy42 (14. Nov 2006)

```
insert into Adresse (VORNAME, NACHNAME) values('1''Hans''Muster'
```

Das ist auch keine gültige SQL-Anweisung.


```
insert into Adresse (VORNAME, NACHNAME) values('Hans', 'Muster')
```
Auch muß bei einer Insert-Anweisung natürlich die Anzahl der
formalen Parameter _(VORNAME, NACHNAME)_ gleich der Anzahl der
aktuellen Parameter _('Hans', 'Muster')_


----------



## HLX (15. Nov 2006)

1. falsches Forum

2. 





			
				Freaky Lady hat gesagt.:
			
		

> *Connection con* = DBConnectionManager.createConnection();


Hat doch schon ganz gut angefangen.

3. Hier steht alles was du wissen musst:
http://java.sun.com/j2se/1.4.2/docs/api/java/sql/Connection.html
http://java.sun.com/j2se/1.4.2/docs/api/java/sql/Statement.html


----------



## Freaky Lady (15. Nov 2006)

@ Leroy

Ist mir bewusst das da noch ne Klammer hin muss, nur war mir nicht bewusst wie ich diese im Stream einbauen konnte... Naja, jedenfalls ists jetzt geschafft.

@ HLX

1. Sorry.
2. Problem hat sich erledigt, allerdings noch ne Frage...

Wie kann ich die Einträge im Textfile abfragen ob die Hochkommas da sind ?



> if(...)
> {
> throws new Exception("Bitte fügen sie Hochkommas vor und hinter den Namen ein.");
> }


----------



## Freaky Lady (15. Nov 2006)

Rest des Codes:



> package keywords;
> 
> import java.io.BufferedReader;
> import java.io.File;
> ...


----------



## Leroy42 (15. Nov 2006)

Freaky Lady hat gesagt.:
			
		

> Wie kann ich die Einträge im Textfile abfragen ob die Hochkommas da sind ?



Die müssen, sollen und werden (voraussichtlich) gar nicht da sein.
Du mußt sie schon selbst einfügen:

Statt

```
StringBuffer sqlBuffer = new StringBuffer("insert into Adressen (VORNAME, NACHNAME) values("); 
sqlBuffer.append(vn); 
sqlBuffer.append(","); 
sqlBuffer.append(nn); 
sqlBuffer.append(")");
```
am einfachsten:

```
StringBuffer sqlBuffer = new StringBuffer("insert into Adressen (VORNAME, NACHNAME) values("); 
sqlBuffer
  .append("'").append(vn).append("', '")
  .append(nn).append("')");
```


----------



## Freaky Lady (16. Nov 2006)

Hmm, ist aber nicht meine Aufgabe. In dem Textfile muss man die Namen mit Hochkommas schreiben, ansonsten soll das Programm aufmerksam dararuf machen, dass man Hochkommas einfügen soll.

Mein Beispiel funktioniert leider noch nicht, aber immerhin n Anfang:


> if(id != "''" || vn != "'"+vn+"'" || nn != "'"+nn+"'")
> {
> throw new Exception("Bitte fügen sie links und rechts von den Namen Hochkommas ein");
> }



vn steht für Vorname, nn für Nachname... Gibt eine Fehlermeldung aus sobald man ein Hochkomma vergessen hat, die Fehlermeldung kommt aber auch, wenn alle Hochkommas da sind wo sie sollten...

Die Id wird nicht mitgegeben also da nur zwei Hochkommas.


----------



## SlaterB (16. Nov 2006)

was soll
vn != "'"+vn+"'" bedeuten?

für jeden String auf dieser Welt ist der String selber was anderes als der String mit zwei Hochkommata außen rum,
die Länge des String steigt dann ja um 2, wie soll der String dann noch derselbe sein?

String vergleicht man übrigens mit string.equals(otherstring),

du möchtest vielleicht testen ob der String mit Hochkommata anfängt und endet?
das solltest du auf jeden Fall in eine Operation auslagern:


```
if(id != "''" || !inHochKommata(vn) || !inHochKommata(nn)) 

public boolean inHochKommata(String st) {
  //..
  return false;
}
```

was kann diese Operation nun machen?
sie muss sich den ersten und letzten Buchstaben anschauen und testen, ob dies ein Hchkommata ist,
chars vergleicht man wieder mit ==,
du brauchst die String-Operationen length() und charAt()
und am besten noch abfangen, ob der übergebene String null ist oder weniger als zwei Zeichen enthält


----------



## puddah (17. Nov 2006)

Ich würde vorschlagen, dass du dir einen requlären Ausdruck baust mit dem du die eingelesene Zeile prüfst.


----------



## Freaky Lady (20. Nov 2006)

Hab ne Lösung gefunden:


> if ((!id.startsWith("'")||!id.endsWith("'")) || (!vn.startsWith("'")||!vn.endsWith("'")) || (!nn.startsWith("'")||!nn.endsWith("'")))
> {
> throw new Exception("Bitte fügen sie links und rechts von den Namen Hochkommas ein, Zeilennummer:"+zeilenNummer);
> }


----------



## HLX (20. Nov 2006)

Gratulation!   

...und der Anwender kriegt dann den Stacktrace um die Ohren gehauen...   :autsch:

Tipp: wie SlaterB schon geschrieben hat - lager das doppeltdreifachStartsEndsWith in eine
separate Methode aus  :wink:


----------

