Avatar billede kobojt Nybegynder
29. februar 2000 - 12:21 Der er 9 kommentarer og
1 løsning

Insert into table

Im having trouble inserting data into my database, can anybody tell me what Im doing wrong ?


public static String dbGem() //indsæt
    {
        try
        {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");           
        }
        catch(ClassNotFoundException cnfe)
        {
            System.err.println("JDBC-ODBC driver kunne ikke findes.");
        }       
        if(CardPanel.currentCard == CardPanel.P0)
        {           
            try
            {
                //opret forbindelse
                Connection con = DriverManager.getConnection("jdbc:odbc:Rep");
                Statement stmt = con.createStatement();
                //indsæt data i tabel
                stmt.executeUpdate("INSERT INTO kunder (" +
                                                    "KundeNR, Firmanavn, Adresse, " +
                                                    "PostNR, Bynavn, Telefon, Telefax, " +
                                                    "Kontaktpers, Dtlf, Email, WWW) " + 
                                                    "VALUES ('" +
                                  CardPanel.tfKundeNr.getText() + "', '" + 
                                  CardPanel.tfFrmNvn.getText()  + "', '" + 
                                  CardPanel.tfAdr.getText() + "', '" + 
                                  CardPanel.tfPstNr.getText()  + "', '" + 
                                  CardPanel.tfByNavn.getText() + "', '" + 
                                  CardPanel.tfTlfNr.getText()  + "', '" + 
                                  CardPanel.tfTlfaxNr.getText() + "', '" + 
                                  CardPanel.tfKntPers.getText() + "', '" +
                                  CardPanel.tfDirTlf.getText() + "', '" +
                                  CardPanel.tfEmail.getText() + "', '" +
                                  CardPanel.tfwww.getText() + "')");
                //String updateString = "UPDATE kunder"; //WHERE KundeNR LIKE kunde
                System.out.println("Kunde oprettet(opdateret).");
            }
            catch(SQLException se)
            {
                System.err.println("Kunden blev ikke oprettet.");
                System.out.println(se);
                System.exit(2);
            }
        }
        else if(CardPanel.currentCard == CardPanel.P1)
        {               
                String kunde = CardPanel.tfRKundeNr.getText();
            String firma = CardPanel.tfRFrmNvn.getText();
            String modtag = CardPanel.tfModtIni.getText();
            String fejl = CardPanel.taBox1.getText();
            String lev = CardPanel.tfLevTid.getText();
            String afh = CardPanel.tfOenAfh.getText();
            //String pc = CardPanel.tfPcSeNr.getText();
            String pcliste = CardPanel.taBox2.getText();
            String uarb = CardPanel.taBox3.getText();
            String matforb = CardPanel.taBox4.getText();
                try
                {
                    //opret forbindelse
                    Connection con = DriverManager.getConnection("jdbc:odbc:Rep");
                    Statement stmt = con.createStatement();
                    //indsæt data i tabel
                    stmt.executeUpdate("INSERT INTO Rapport VALUES (modtag, fejl, lev, afh, pc, pcliste, uarb, matforb)");
                    String updateString = "UPDATE Rapport WHERE KundeNR LIKE kunde";
                    System.out.println("Rapport oprettet(opdateret).");
                }
                catch(SQLException se)
                {
                    System.err.println("Rapporten blev ikke oprettet.");
                    System.exit(2);
                }
        }return "Test";
Kobojt
Avatar billede sjensen Nybegynder
29. februar 2000 - 12:54 #1
A SQL insert statement should look like this:

INSERT INTO {table} ({field11}, {field2}) VALUES ({value1}, {value2});

In your first one you specify the fieldnames as values contained within quoates like:
("INSERT INTO kunder (" +
"KundeNR, Firmanavn, Adresse, " + "PostNR, Bynavn, Telefon, Telefax, " + "Kontaktpers, Dtlf, Email, WWW) " +  "VALUES ('" +

this should be:

Insert into kunder (Kundenr,Firmanavn,Adresse, Postnr, ..) values (CardPanel.tfKundeNr.getText() + ","+...)

And the other one should be

stmt.executeUpdate("INSERT INTO Rapport (field1, field2,..) VALUES (modtag, fejl, lev, afh, pc, pcliste, uarb, matforb)");

And I am a little confused about the Update statemnent follwing this line. Are you trying to insert values into a existing record (by inserting values into a record you are updating) ?

If so, this is not the way to do it. You should use "UPDATE Rapport (field,..) using values(xx,..) where kundern like kunde"
Avatar billede kobojt Nybegynder
01. marts 2000 - 11:02 #2
Hi sjensen

rent faktisk prøver jeg på at gøre begge dele, i første omgang er det dog kun insert funktionen jeg vil have til at virke.
Når jeg kører programmet for jeg følgende runtimefejl:

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.

Kobojt
Avatar billede sjensen Nybegynder
01. marts 2000 - 11:15 #3
"Data type mismatch in criteria expression" er fordi du angiver feltnavnene som en lang streng omgivet af anførselstegn:

"KundeNR, Firmanavn, Adresse, " +
"PostNR, Bynavn, Telefon, Telefax, " +
"Kontaktpers, Dtlf, Email, WWW) " +

Skriv det istedet sådan som jeg angav i mit første svar:

Insert into kunder (Kundenr,Firmanavn,Adresse, Postnr, ..) values (CardPanel.tfKundeNr.getText(),..)

og fjern anførselstegnene. Det er dem der driller.
Avatar billede kobojt Nybegynder
01. marts 2000 - 12:35 #4
Det kan jeg simpelthen ikke få til at virke.

stmt.executeUpdate(INSERT INTO kunder (KundeNR, Firmanavn, Adresse, PostNR, Bynavn, Telefon, Telefax, Kontaktpers, Dtlf, Email, WWW) +
              "VALUES (int a = Integer.parseInt(CardPanel.tfKundeNr.getText()) +","+ CardPanel.tfFrmNvn.getText()+","+CardPanel.tfAdr.getText()+","+ int d = Integer.parseInt(CardPanel.tfPstNr.getText())+","+ CardPanel.tfByNavn.getText()+","+ CardPanel.tfTlfNr.getText()+","+ CardPanel.tfTlfaxNr.getText()+","+ CardPanel.tfKntPers.getText()+","+ CardPanel.tfDirTlf.getText()+","+ CardPanel.tfEmail.getText()+","+ CardPanel.tfwww.getText())");
             
Kompileringsfejl:

DBForb.java:178: ')' expected.

              stmt.executeUpdate(INSERT INTO kunder (KundeNR, Firmanavn, Adresse, PostNR, Bynavn, Telefon, Telefax, Kontaktpers, Dtlf, Email, WWW) +

Kobojt
Avatar billede kobojt Nybegynder
01. marts 2000 - 15:41 #5
Ok, sjensen nu har jeg brugt et par timer på det og nu får jeg denne helt nye runtimefejl:

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Syntax error in INSERT INTO statement.

Kobojt
Avatar billede kobojt Nybegynder
01. marts 2000 - 15:50 #6
ohh jo, koden ser nu sådan ud.

stmt.executeUpdate("INSERT INTO kunder (KundeNR, Firmanavn, Adresse, PostNR, Bynavn, Telefon, Telefax, Kontaktpers, Dtlf, Email, WWW" +
              "VALUES (int a = Integer.parseInt(CardPanel.tfKundeNr.getText()), CardPanel.tfFrmNvn.getText(), CardPanel.tfAdr.getText(), int d = Integer.parseInt(CardPanel.tfPstNr.getText()), CardPanel.tfByNavn.getText(), CardPanel.tfTlfNr.getText(), CardPanel.tfTlfaxNr.getText(), CardPanel.tfKntPers.getText(, CardPanel.tfDirTlf.getText(), CardPanel.tfEmail.getText(), CardPanel.tfwww.getText())");
Avatar billede sjensen Nybegynder
01. marts 2000 - 16:05 #7
Der er stadig et problem:

Der mangler en parantes og et mellemrum mellem www og anførselstegnet. Sådan:

.., WWW) " + "VALUES (...

Højreparantesen bruges til at afslutte listen af feltnavne og mellemrummet til at sikre at den færdige streng der kaldes med har afstend mellem strengen og ordet "values"
Avatar billede kobojt Nybegynder
01. marts 2000 - 16:28 #8
sjensen, kan jeg ikke få dig til at lave sætningen, jeg har stirret mig blind på det.

Kobojt
Avatar billede sjensen Nybegynder
01. marts 2000 - 16:43 #9
Prøv denne:

stmt.executeUpdate("INSERT INTO kunder (KundeNR, Firmanavn, Adresse, PostNR, Bynavn, Telefon, Telefax, Kontaktpers, Dtlf, Email, WWW) VALUES (CardPanel.tfKundeNr.getText(), CardPanel.tfFrmNvn.getText(), CardPanel.tfAdr.getText(), CardPanel.tfPstNr.getText(), CardPanel.tfByNavn.getText(), CardPanel.tfTlfNr.getText(), CardPanel.tfTlfaxNr.getText(), CardPanel.tfKntPers.getText(, CardPanel.tfDirTlf.getText(), CardPanel.tfEmail.getText(), CardPanel.tfwww.getText())");

nb!
De 2 felter du har hvor du har Integer.parseint() funktionen har du skrevet int a eller d = integer.parse..

Hvis de skal være integers, så skriv dem uden "int x =" delen, således

Integer.parseInt(CardPanel.tfKundeNr.getText()),
og
Integer.parseInt(CardPanel.tfPstNr.getText()),

Avatar billede kobojt Nybegynder
01. marts 2000 - 17:42 #10
TAK! Endenlig fungerer det.

Kobojt
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester