hm: von java aus datenbank füllen

Hi Leute,

ich habe diesen link gefunden:

http://it-republik.de/jaxenter/artikel/MySQL-und-Java-Datenabfrage-3236.html

Hier wird beschrieben, wie ich auf eine MySQL Datenbank zugreifen kann. Kennt einer von euch den Code oder die Beschreibung, wie man mit java Daten in eine MySQL Datenbanktabelle schreiben kann?

  1. Hallo,

    Hier wird beschrieben, wie ich auf eine MySQL Datenbank zugreifen kann. Kennt einer von euch den Code oder die Beschreibung, wie man mit java Daten in eine MySQL Datenbanktabelle schreiben kann?

    Ja.

    Grüße
    Siri

    1. public static void InMySQL(String[][] args, String unischrift){  
      	try{  
      		   Class.forName("com.mysql.jdbc.Driver");  
      		   }  
      		   catch (ClassNotFoundException e){  
      		   System.out.println("Kann nicht geladen werden");  
      		   return;  
      		   }  
      		   try{  
      		   Connection con=  
      		   DriverManager.getConnection(  
      		   "jdbc:mysql://localhost/bib");  
      		   Statement stmt=(Statement) con.createStatement();  
      		   String bef;  
      		   /\*String autor="Kant";  
      		   String titel="Kritik der reinen Vernunft";  
      		   int jahr=1965;\*/  
      		  
      		   bef="insert into " + unischrift  
      		   +"(CustomID, Bisheriger Nutzen , Zeitraum) "  
      		   +"values (\""+args[0][0]+"\", \""+args[0][1]+"\", \""+null+"\")";  
      		   //System.out.println(bef);  
      		   ResultSet rs=stmt.executeQuery(bef);  
      		   rs.close();  
      		   stmt.close();  
      		   con.close();  
      		   }  
      		   catch (SQLException se){  
      		   System.out.println("SQL Fehler "+se.getMessage());  
      		   se.printStackTrace(System.out);  
      		   }  
      		  
      }  
      

      ich benutze diese methode um die tabelle zbiscgrift der datenbank Customer zu füllen, bekomme aber diese exception:

      SQL Fehler Access denied for user ''@'localhost' (using password: NO)
      java.sql.SQLException: Access denied for user ''@'localhost' (using password: NO)
      at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
      at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
      at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
      at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:919)
      at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1694)
      at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1244)
      at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2412)
      at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2445)
      at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2230)
      at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:813)
      at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
      at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
      at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
      at java.lang.reflect.Constructor.newInstance(Unknown Source)
      at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
      at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)
      at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334)
      at java.sql.DriverManager.getConnection(Unknown Source)
      at java.sql.DriverManager.getConnection(Unknown Source)
      at GUI.Main.InMySQL(Main.java:57)
      at GUI.Main.main(Main.java:39)

      hm, muss ich da jetzt irgendein passwort angeben?

      1. Hallo,

        Connection con=DriverManager.getConnection("jdbc:mysql://localhost/bib", "user", "password");

        würde ich sagen. Eventuell auch 127.0.0.1 statt localhost.

        Grüße
        Siri

        1. danke für die hilfe

          jetzt sieht meine methode so aus:

          public static void InMySQL(String[][] args, String unischrift){
          try{
             Class.forName("com.mysql.jdbc.Driver");
             }
             catch (ClassNotFoundException e){
             System.out.println("Kann nicht geladen werden");
             return;
             }
             try{
             Connection con=
             DriverManager.getConnection(
             "jdbc:mysql://localhost/customer","root","hallo100");
             Statement stmt=(Statement) con.createStatement();
             String bef;
             /*String autor="Kant";
             String titel="Kritik der reinen Vernunft";
             int jahr=1965;*/

          		   bef="insert into " + unischrift  
          		   +"(CustomID, Bisheriger Nutzen , Zeitraum) "  
          		   +"values (\""+args[0][0]+"\", \""+args[0][1]+"\", \""+args[0][2]+"\")";  
          		   //System.out.println(bef);  
          		   boolean rs=stmt.execute(bef);  
          		  // rs.close();  
          		   stmt.close();  
          		   con.close();  
          		   }  
          		   catch (SQLException se){  
          		   System.out.println("SQL Fehler "+se.getMessage());  
          		   se.printStackTrace(System.out);  
          		   }  
          		  
          }  
          

          und es kommt zu folgener fehler meldung:

          SQL 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 'nutzen(CustomID, Bisheriger Nutzen , Zeitraum) values ("2132153359100255838", "1' at line 1
          com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 'nutzen(CustomID, Bisheriger Nutzen , Zeitraum) values ("2132153359100255838", "1' at line 1
          at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
          at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
          at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
          at java.lang.reflect.Constructor.newInstance(Unknown Source)
          at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
          at com.mysql.jdbc.Util.getInstance(Util.java:386)
          at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1053)
          at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
          at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
          at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
          at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
          at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2728)
          at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2678)
          at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:894)
          at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:732)
          at GUI.Main.InMySQL(Main.java:69)
          at GUI.Main.main(Main.java:39)

          wenn ich das richtig interpretiere, erkennt er sie spalte für bisherigen nutzen nicht?

          1. Tach,

            "jdbc:mysql://localhost/customer","root","hallo100");

            ich hoffe, das ist nicht dein wirkliches Passwort, und man sollte nie als root arbeiten, wenn es nicht unbedingt notwendig ist.

            wenn ich das richtig interpretiere, erkennt er sie spalte für bisherigen nutzen nicht?

            Spaltennamen mit Sonderzeichen müssen gequotet werden.

            mfg
            Woodfighter

            1. ich hoffe, das ist nicht dein wirkliches Passwort

              hm... das hoffe ich auch

              Spaltennamen mit Sonderzeichen müssen gequotet werden.

              was bedeutet den gequotet?

              Ich hab einen "." im Namen, zählt das als Sonderzeichen?

              1. Tach,

                was bedeutet den gequotet?

                zum Kontext passende Anführungszeichen drumherummachen, bei Spaltennamen in MySQL wären das `.

                Ich hab einen "." im Namen, zählt das als Sonderzeichen?

                Also ich sehe nur ein Leerzeichen in einem Spaltennamen keinen Punkt.

                mfg
                Woodfighter

                1. zum Kontext passende Anführungszeichen drumherummachen, bei Spaltennamen in MySQL wären das `.

                  Ich hab einen "." im Namen, zählt das als Sonderzeichen?

                  Also ich sehe nur ein Leerzeichen in einem Spaltennamen keinen Punkt.

                  danke für die hilfe, leider passt ' immer noch nicht ganz:

                  SQL 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 'nutzen(CustomID,'Bisheriger Nutzen',Zeitraum) values ("2132153359100255838", "13' at line 1
                  com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 'nutzen(CustomID,'Bisheriger Nutzen',Zeitraum) values ("2132153359100255838", "13' at line 1
                  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
                  at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
                  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
                  at java.lang.reflect.Constructor.newInstance(Unknown Source)
                  at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
                  at com.mysql.jdbc.Util.getInstance(Util.java:386)
                  at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1053)
                  at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
                  at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
                  at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
                  at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
                  at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2728)
                  at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2678)
                  at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:894)
                  at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:732)
                  at GUI.Main.InMySQL(Main.java:69)
                  at GUI.Main.main(Main.java:39)

                  1. Ich weiß nicht, wie das in MySQL ist... Ist 'Bisheriger Nutzen' wirklich ein gültiger Spaltenname? Oder benutzt du den Kommentar/Alias zum Spaltennamen?

                    1. Ich weiß nicht, wie das in MySQL ist... Ist 'Bisheriger Nutzen' wirklich ein gültiger Spaltenname? Oder benutzt du den Kommentar/Alias zum Spaltennamen?

                      ich hatte eine leerzeile im tabellen namen, jetzt gehts.

                      problem ist jetzt: ich habe leerzeilen in den dinger die ich in die zellen der tabelle schreiben möchte, also in args[0][2] - was kann ich da tun?

                      1. Tach,

                        problem ist jetzt: ich habe leerzeilen in den dinger die ich in die zellen der tabelle schreiben möchte, also in args[0][2] - was kann ich da tun?

                        kontextgerecht escapen

                        mfg
                        Woodfighter

                        1. Tach,

                          problem ist jetzt: ich habe leerzeilen in den dinger die ich in die zellen der tabelle schreiben möchte, also in args[0][2] - was kann ich da tun?

                          kontextgerecht escapen

                          mfg
                          Woodfighter

                          hm...

                          ich hab jetzt alle leerstellen rausgezogen, komischer weise bricht er bei 7 ab, aber zwischen 1 und 7 ist kein zeichen:

                          '2011-11-1713:44:48.702000000-2011-12-3010:18:05.419000000'
                          SQL 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 ''Bisheriger Nutzen',Zeitraum) values ("2132153359100255838", "135.0","'2011-11-1' at line 1
                          com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 ''Bisheriger Nutzen',Zeitraum) values ("2132153359100255838", "135.0","'2011-11-1' at line 1
                          at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
                          at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
                          at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
                          at java.lang.reflect.Constructor.newInstance(Unknown Source)
                          at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
                          at com.mysql.jdbc.Util.getInstance(Util.java:386)
                          at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1053)
                          at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
                          at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
                          at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
                          at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
                          at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2728)
                          at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2678)
                          at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:894)
                          at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:732)
                          at GUI.Main.InMySQL(Main.java:69)
                          at GUI.Main.main(Main.java:39)

                          1. Tach,

                            '2011-11-1713:44:48.702000000-2011-12-3010:18:05.419000000'
                            SQL 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 ''Bisheriger Nutzen',Zeitraum) values ("2132153359100255838", "135.0","'2011-11-1' at line 1

                            wie sieht das vollständige SQL-Statement aus, das du abschickst?

                            mfg
                            Woodfighter

                            1. Tach,

                              '2011-11-1713:44:48.702000000-2011-12-3010:18:05.419000000'
                              SQL 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 ''Bisheriger Nutzen',Zeitraum) values ("2132153359100255838", "135.0","'2011-11-1' at line 1

                              wie sieht das vollständige SQL-Statement aus, das du abschickst?

                              mfg
                              Woodfighter

                              jetzt klappts, ich hatte wahrscheinlich irgendwo einen fehler der beim umbauen verschwunden ist

                              danke für eure hilfe!

      2. Tach,

        hm, muss ich da jetzt irgendein passwort angeben?

        ja, siehe die alternativen Aufrufe von getConnection().

        Weiterhin solttest du dir vermutlich mal Hibernate anschauen.

        mfg
        Woodfighter