12. juli 2002 - 19:56Der 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
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...
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')");
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;
// 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; }
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
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.