Announcement

Collapse
No announcement yet.

wie kann ich in Java vor und nach einem INSERT Einstellungen setzen ?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • wie kann ich in Java vor und nach einem INSERT Einstellungen setzen ?

    also, ich brauche vor einem Insert bestimmte Einstellungen, die nachher zurückgesetzt werden,
    dafür hab ich mitm JAva ein Funtion ertstellt , die mit derselben Conn. , mit auch der Insert läuft,
    die Einstellungen setzen soll, seht selbst :

    Code:
        private static void run_set_scripts(Connection cn_sp,String modus)
        {
            //-Einstellungen mittels SET-Kommando --
            String set_sql = "";
            if(modus.startsWith("PRE"))
            {
                set_sql = "SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;";
                //set_sql += "SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS;";
                set_sql += "SET FOREIGN_KEY_CHECKS = 0;";
            }    
            if(modus.startsWith("POST"))
            {
                //set_sql = "SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;";
                set_sql = "SET FOREIGN_KEY_CHECKS = 1;";
                set_sql += "SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;";
            }    
            
            try
            {    
                cn_sp.setAutoCommit(true);
                Statement stmt = cn_sp.createStatement();
                stmt.executeUpdate(set_sql);
                System.out.println("ttsp_func_data run_set_scripts modus "+modus+" set_sql : "+set_sql+" ausgefuehrt !");             
            }
            catch (Exception e)
            {
                System.err.println("ttsp_func_data run_set_scripts modus "+modus+" Fehler : "+e.getMessage());
               //e.printStackTrace();
            }    
        }
    Obwohl ich die SET-Anweisungen einem Skript entnommen habe, das mit sqldump erzeugt wurde, wirft Java immer einen SQL-Fehler :

    ttsp_func_data run_set_scripts modus PRE Fehler : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET FOREIGN_KEY_CHECKS = 0' at line 1

    was soll daran falsch sein ?

    in der MySQL-Workbench wirft SET FOREIGN_KEY_CHECKS = 0 auch keinen Fehler, wirkt sich aber auch nicht aus.

    Derzeit schreibt das Programm nur 10 von 109 Zeilen in die Zieldatei, nicht der wahre Jakob :-)

    was tun, sprach Zeus ..

  • #2
    Das sollte mit einem execute erfolgen nicht mit einem executeUpdate

    Man benennt auch keine Methoden mit Unterstrichen


    run_set_scripts -> runSetScripts
    Christian

    Comment


    • #3
      hi christian, mit execute hab ich zuerst versucht, hab ann erst executeUpdate probiert..man weiß ja nie..:-)

      übrigens mach ich schon seit 8 jahren funktionsnamen mit unterstrichen..die kunden sind bisher zufrieden :-o

      Comment


      • #4
        übrigens mach ich schon seit 8 jahren funktionsnamen mit unterstrichen..die kunden sind bisher zufrieden :-o
        Schön, ist aber kein Javastandard (allein bei der Nutzung von Framework die Beans voraussetzen usw.) und wenn du 8 Jahre Java machst, ist der obige Code leider einfach sehr stark optimierungsbedürftig
        Christian

        Comment


        • #5
          Hallo,

          MySQL kann selbst nicht mit Mehrfachanweisungen innerhalb eines Statements umgehen! MySQL kann immer nur EINE Anweisung abarbeiten. Dein zusammengebauter SQL-String ist also syntaktisch falsch.
          Das Verarbeiten mehrerer Befehle anhand eines bestimmten Trenners (z.B. ';') ist Funktionalität des CLIENTS (z.B. der Workbench). In deinem Fall ist aber stmt.executeUpdate (bzw. stmt.execute) der Client und der wird das nicht in einzelne Befehle parsen.
          Du musst also für jede SET-Anweisung separat ein stmt.execute absetzen!

          Gruß Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            hat mir einer ausm java-forum die richtige idee gegeben : mehrere Befehle gehen in einem execute-Statement,
            hab sql-array abarbeiten lassen -> alles ok

            somit gelöst !

            Comment


            • #7
              hat sich mit falk überschnitten ,sorry falk

              der browser hat deinen beitrag noch nicht angezeigt, erst jetzt nachm letzten posting.
              dein hinweis war natürlich ok ! danke auch hier !

              Comment

              Working...
              X