![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Gast
Beiträge: n/a
|
Hi zusammen, stehe gerade vor einem kleinen Problem und brauche Rat.
zunächst einmal DB-Anbindungen passen und sind getestet. Ziel war es mehrzeilige SQL-Anweisungen einzulesen und zeile für zeile abzuarbeiten. das sieht so aus: Hier der CODE: void values_actionPerformed(ActionEvent e) { // das file parsen String str_insert_stmt =""; // wir lesen das File zeilenweise ein, voraussetzung: ein Statement in // einer Zeile, wenn meherere drin sind: Tokenizer // file muss so heissen und im richtigen pfad liegen (classes/ Project) try { BufferedReader reader = new BufferedReader(new FileReader("ins.sql")); String one_line_stmt = null; while((one_line_stmt = reader.readLine())!= null) { str_insert_stmt += one_line_stmt; // debug System.out.println(str_insert_stmt); } } catch (Exception exc) { jTextArea1.setText("EXCEPTION while reading sql File insert.sql, Message: \n" + exc.getMessage() ); } try { Statement stmt1 = this.database1.getJdbcConnection(). createStatement(); boolean done = stmt1.execute(str_insert_stmt); // feld leer machen jTextArea1.setText(""); // db meldung ausgeben if (done) jTextArea1.setText("Insert successfull "); else jTextArea1.setText("Error while inserting"); } catch (Exception exc) { // feld leer machen jTextArea1.setText(""); //Exception ausgeben jTextArea1.setText("EXCEPTION while executing SQL statement, Message: \n" + exc.getMessage() ); } } __________________________________________________ _______________________ So sieht das Scriptfile aus (ins.sql) INSERT INTO sas VALUES ('1001','DVD','Lord','Lord of the Rings II','D',16,50) INSERT INTO sas VALUES ('1002','DVD','Avia','Aviator','D',20,1 Und hier das was der Java draus macht (JBuilder Meldungen INSERT INTO sas VALUES ('1001','DVD','Lord','Lord of the Rings II','D',16,50) INSERT INTO sas VALUES ('1001','DVD','Lord','Lord of the Rings II','D',16,50)INSERT INTO sas VALUES ('1002','DVD','Avia','Aviator','D',20,1 Begrenze ich die Statements mit ; ..gleiches in Grün nur eben mit ; dahinter.. gibt natürlich nen SQL-Syntaxfehler zurück.. thx in advance |
|
|
|
Nach oben #2 |
|
Sesselkleber
Registriert seit: 17.01.2005
Beiträge: 567
|
Also wenn ich das richtig verstanden habe versuchst du gaaanz viele SQL-Statements direkt aus einem Text-File lesen und direkt in einem Rutsch von Java an die Datenbankl schicken lassen möchtest.
Das Vorgehen würde ich vermeiden. Zum einen weiß ich nicht ob Java das überhauüt so kann (habs vorher noch nie probiert), zum anderen entgehen dir garantiert datensätzer in denen ein Fehler auftritt. Ich würde an deiner Stelle so vorgehen: Les die Textdatei Zeile für Zeile ein und verpack die Strings in ein Array bzw. einen Vector. Anschließend läßt du in einer einfachen Schleife Statement für Statement an die Datenbanl senden. Wahrscheinlich dauert das länger als deine Mehthode, dafür kannst du dir aber ausgeben lassen wenn eine Exceptionen bei einem bestimmten Datensatz auftritt. Gruß Sparrow |
|
|
|
|
|
Nach oben #3 |
|
Benutzer
Registriert seit: 05.07.2004
Beiträge: 95
|
also ich würde das in etwa so lösen ... hab deinen Code mal als Grundlage genommen und ein wenig erweitert ... ich kenne mich allerdings nicht mit den SQL - Befehlen in Java aus, nur in PHP.
void values_actionPerformed(ActionEvent e) { // Dateiname der Datei wo die Anweisungen drin sind String lSQL_Anweisungen = "foo.txt"; // Vektor der alle Anweisungen enthält Vector lListe; // Befehle einlesen LineNumberReader f; try { f = new LineNumberReader(new FileReader(lSQL_Anweisungen); while ( (line = f.readLine()) != null) { // trim(); damit leerzeichen entfernt werden lListe.addElement(line.trim()); } f.close(); } catch ( IOException e ) { jTextArea1.setText("EXCEPTION while reading sql File insert.sql, Message: \n" + e.getMessage() ); } // Debugausgabe for (int i=0; i<lListe.size(); i++) { System.out.println((String)lListe.elementAt(i)); } // SQL-Befehle an den Server senden for (int i=0; i<lListe.size(); ++) { String sql_anweisung = (String)lListe.elementAt(i); try { Statement stmt1 = this.database1.getJdbcConnection(). createStatement(); boolean done = stmt1.execute(sql_anweisung); // feld leer machen jTextArea1.setText(""); // db meldung ausgeben if (done) { jTextArea1.setText("Command successfull "); } else { jTextArea1.setText("Error, command not successfull"); } } catch (Exception e) { // feld leer machen jTextArea1.setText(""); //Exception ausgeben jTextArea1.setText("EXCEPTION while executing SQL statement, Message: \n" + e.getMessage() ); } } } Liebe Grüße Florian P.S.: im anhang findet sich eine txt - Datei welche auch ordentlich eingerückt ist, damit man den Source besser lesen kann.
__________________
|
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Sql Datei einlesen? | heohni | PHP-Programmierung | 5 | 01.10.2006 19:16 |
| [Linux] LAMP Tutorial - Installation von Apache, MySQL und PHP unter Linux | Corvin | Tutorials | 6 | 17.04.2006 22:13 |
| MySQL 5.1 kommt in die Beta-Phase | Ben | Nachrichten | 1 | 02.03.2006 14:31 |