Avatar billede havmaage Juniormester
12. juli 2002 - 19:56 Der er 12 kommentarer og
1 løsning

string variabler i sql sætning hvordan

Hej! eksperter endnu engang! at samle strings i sql sætning er åbenbart lidt specielt, jeg har i hvert fald siddet et stykke tid nu og nørklet med det. jeg har følgende kald til db, som iøvrigt virker hvis jeg hardcoder values.

dba.execSql("insert into person (fornavn, efternavn, Adresse) values (" + FirstName "," + SirName"," + Address")");


FirstName, SirName, Adress er almindelige string vars, hentet fra stdin.readLine();

Det må være rimeligt simpelt at lave dette, derfor synes jeg også det er lidt pinligt :-) men jeg kan f..... ikke få det til at spille.
HJÆLP please

Det er billige point :-)
Avatar billede nico26 Nybegynder
12. juli 2002 - 20:11 #1
Jeg mener der skal en single-quote omkring strenge.

... values(" + '\'' + FirstName + '\'' + ...
Avatar billede bearhugx Nybegynder
12. juli 2002 - 20:44 #2
dba.execSql("INSERT INTO Person (fornavn, efternavn, adresse) VALUES (\""+FirstName+"\", \""SirName+"\", \""+Address+"\") ");

/Søren
Avatar billede bearhugx Nybegynder
12. juli 2002 - 20:59 #3
nico22 >> der er dog en lille fejl i din kommentar, som gør at koden ikke vil kunne kompilere...

Efter at have afsluttet strengen ved de første gåseøjne ("), forsøger du at starte en ny streng med enkelt quote (') - Det kan man ikke i Java. Kun gåseøjne kan omklamre strenge...

Selvom strenge kunne omklamre strenge ville endnu en fejl gøre selve kaldet ugyldigt, da du lukker "enkel-quote"-strengen før "gåseøjne"-strengen (geez, den blev sgu underlig, den sætning....)
Se evt her
  values( '" +FirstName+ '" 

- Derudover vil der blive skrevet " + FirstName + ", i stedet for værdien af FirstName i databasen ... Hvis enkel-quotes kunne være strings, that is...

--- Udover det, har du fuldstændig ret i, at det handler om at putte quotes omkring streng-værdierne...

/Søren
Avatar billede havmaage Juniormester
12. juli 2002 - 21:21 #4
Jeg kan ikke rigtig få det til at spille. prøv at se her

simse.java
import java.sql.*;
import java.util.Vector;
import java.io.*;

class simse {
   
       
        public static void main(String[] args) throws IOException{
                 
                input in = new input();
             
             
                in.input();
             
                             
            //    A.execSql("insert into person ( fornavn,efternavn,Adresse) values ('Busse','Jansen','GGiollavej 30')");   
                   
           
                       
   
    }       

}


Jeg får følgende fejl:

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Too few paramet
ers. Expected 3.
        at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6026)
        at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:6183)
        at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:2489)
        at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:329)
        at Access.execSql(Access.java:34)
        at input.input(input.java:27)
        at simse.main(simse.java:13)
Press any key to continue...





input.java

import java.sql.*;
import java.io.*;
public class input {


    //public static void main(String[] args) throws IOException{
public void input() throws IOException {
        BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in));
        String FirstName, SirName, Address, SqlVal;

      System.out.println ("Type your firstname:");
      FirstName = stdin.readLine();
      System.out.println ("Type your Sir Name:");
      SirName =stdin.readLine();
      System.out.println ("Type your Addresse:");
      Address=stdin.readLine();
    //System.out.println ("Du skrev:" + FirstName + SirName + Address );
      Access dba = new Access();
      dba.Access();
    try {
                dba.open();
                } catch (SQLException e) {
                  e.printStackTrace();
             
             
    dba.execSql("INSERT INTO Person (fornavn, efternavn, adresse) VALUES (\""+FirstName+"\", \""+SirName+"\", \""+Address+"\") ");

   
         
       
   
    }
}


Jeg kan godt paste Access.java, men det virker hvis jeg kalder det direkte fra min main med
            //    A.execSql("insert into person ( fornavn,efternavn,Adresse) values ('Busse','Jansen','GGiollavej 30')");
Avatar billede bearhugx Nybegynder
12. juli 2002 - 21:28 #5
kan du lige prøve at udskifte

dba.execSql("INSERT INTO Person (fornavn, efternavn, adresse) VALUES (\""+FirstName+"\", \""+SirName+"\", \""+Address+"\") ");

med

  String sql = "INSERT INTO Person (fornavn, efternavn, adresse) VALUES ('"+FirstName+"', '"+SirName+"', '"+Address+"')";
  System.out.prinln(sql);
  dba.execSql(sql);

og så fortælle / paste, hvad den udskriver på skærmen

/Søren
Avatar billede bearhugx Nybegynder
12. juli 2002 - 21:29 #6
Ps : Det hedder SurName og ikke SirName (udtalen er næsten den samme - men ikke stavemåden :-)
Avatar billede havmaage Juniormester
12. juli 2002 - 21:34 #7
Følgende sql sætning kommer frem, det ser vel egenligt ok ud
skal nok huske sur og ikke sir :-)

INSERT INTO Person (fornavn, efternavn, adresse) VALUES ('hogo', 'nielsen', 'ves
tergade 17')
Avatar billede bearhugx Nybegynder
12. juli 2002 - 21:38 #8
Men selve kaldet fejlede og der blev kastet en exception ????
Avatar billede havmaage Juniormester
12. juli 2002 - 21:42 #9
Det lidt ligesom når jeg laver database kaldet fra en anden klasse end min main at det fejler.
dba kaldes fra klassen simse til  klassen input der igen kalder klassen Access. min access.java ser således ud

virker i min Access:
import java.sql.*;
import java.util.Vector;


public class Access {

    private Connection con;
    private Vector results;

   
 


    public void Access() {

        // Load the JDBC-ODBC bridge driver
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        } catch (ClassNotFoundException ee) {
            ee.printStackTrace();
        }
    }


    //    2.open a data source name by means of the jdbcodbcdriver.
// udfør sql statement uden resultset
    public  void execSql(String sql) {

        try {
            Statement stmt = con.createStatement();
            stmt.execute(sql);
        } catch(Exception e) {e.printStackTrace();}

    }
    public void open() throws SQLException {

        // ODBC data source name
        String dsn = "jdbc:odbc:person";
        String user = "admin";
        String password = "";

        // Connect to the database
        con = DriverManager.getConnection(dsn, " ", " ");

        // Shut off autocommit
        //    con.setAutoCommit(true);

    }


// udtræk fra databasen, resultatet består af en sekvens af felter
    public Vector doQuery(String sqlUdtryk) {
        ResultSet rs = null;
        Vector data = new Vector();
        try {
            Statement stmt = con.createStatement();
            rs = stmt.executeQuery(sqlUdtryk);

            ResultSetMetaData rsmd = rs.getMetaData();

            int numberOfColumns = rsmd.getColumnCount();


            while (rs.next()) {
                if (numberOfColumns > 1) {
                    for (int i = 1; i <= numberOfColumns; i++) {
                        data.add(rs.getString(i));
                        //System.out.println(data);
                    }
                } else {
                    data.add(rs.getString(1));
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return data;
    }


}
Avatar billede bearhugx Nybegynder
12. juli 2002 - 22:06 #10
Har du checket at store og små bogstaver er ens i strengen og databasen ...

Du svarede ikke på mit tidligere spørgsmål.. Virkede det, og hvis ikke... Hvad var exception-udskriften... ??

/Søren
Avatar billede bearhugx Nybegynder
12. juli 2002 - 22:09 #11
dit kald fra main virker ?? ... Ok - prøv at skrive Adresse med stort i Insert-udtrykket
Avatar billede havmaage Juniormester
12. juli 2002 - 22:21 #12
Det er sgu lidt mærkeligt :-) når jeg bruger din metode får jeg ikke fejlbeskeden med databasen bliver heller opdateret. Jeg har rettet variabler til. Jeg har på fornemmeren at det er en eller anden lille fejl 25 i syntaxen etc.. Så du får mange tak for lærerigt input, til dette spg. Så vil jeg selv gennemgå det for skrive fejl eller andet imorgen ellers poster jeg et nyt soørgsmål med lidt flere point.
Ha en god weekend.
Simon
Avatar billede bearhugx Nybegynder
12. juli 2002 - 22:23 #13
Ok :-)
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