/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Access database i Java
Fra : The MaXx


Dato : 16-04-02 22:10

Hej gruppe.

Jeg har et problem med at køre nogle statements mod en M$ access database.

Følgende linie giver alle forekomster, og virker fint.

ResultSet rs = s.executeQuery("SELECT navn FROM personer");

Men dette virker ikke:

ResultSet rs = s.executeQuery("SELECT navn FROM personer WHERE nr=
\""+nr+"\";");

Det virker fint hvis jeg prøver at køre det som SQL statement i M$ Access,
men fra Java giver det denne fejl:
java.sql.SQLException: [Microsoft][ODBC Microsoft Access-driver] Der er for
få parametre. Der var ventet 1. at
sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6031) at
sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:6188) at
sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:2494) at
sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:314) at
sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:229)

Det forstår jeg ikke lige hvorfor.
Håber på at nogle af jer kender svaret.

The MaXx



 
 
Mikkel Bundgaard (16-04-2002)
Kommentar
Fra : Mikkel Bundgaard


Dato : 16-04-02 22:18

The MaXx <the_maxx80@hotmail.com> wrote:

> Hej gruppe.
>
> Jeg har et problem med at køre nogle statements mod en M$ access
> database.
>
> Følgende linie giver alle forekomster, og virker fint.
>
> ResultSet rs = s.executeQuery("SELECT navn FROM personer");
>
> Men dette virker ikke:
>
> ResultSet rs = s.executeQuery("SELECT navn FROM personer WHERE nr=
> \""+nr+"\";");
Hvis nr i tabellen personer er erklæret som et tal skal du sikkert
fjerne de to " omkring det. Desuden har du skrevet et ; i slutningen
af forespørgslen, det burde ikke være nødvendigt . Dvs. prøv med
ResultSet rs = s.executeQuery("SELECT navn FROM personer WHERE nr =
" + nr);

--
Mikkel Bundgaard
IT University of Copenhagen
http://officehelp.gone.dk
Codito, Ergo Sum



Carsten H. Pedersen (17-04-2002)
Kommentar
Fra : Carsten H. Pedersen


Dato : 17-04-02 09:35

Hejsa

> > Men dette virker ikke:
> >
> > ResultSet rs = s.executeQuery("SELECT navn FROM
> > personer WHERE nr=\""+nr+"\";");
Dvs. at du kan i Access skrive:

select navn from personer where nr="2";

uden at det giver en fejl?

Som Mikkel skriver skal man undlade "", hvis der er tale om at nr er et
tal... hvilket ville være det mest naturlige. Du skriver dog at det virker i
Access med "", så det tyder på det er erklæret som tekst? I så fald kan du
overveje at lave følgende i stedet:

ResultSet rs = s.executeQuery("select navn from personer where nr =
'"+nr+"'");

Altså med to ' i stedet for ".


/Carsten




The MaXx (17-04-2002)
Kommentar
Fra : The MaXx


Dato : 17-04-02 11:02

> overveje at lave følgende i stedet:
>
> ResultSet rs = s.executeQuery("select navn from personer where nr =
> '"+nr+"'");
>
> Altså med to ' i stedet for ".

Tak for hjælpen.
Jeg sad og slog mig selv i hovedet utallige gange da jeg læste dit svar. Det
er åbenbart for længe siden jeg har arbejdet med SQL.
Man glemmer dog let denne detalje når access selv accepterer "".

The MaXx



Jan Oksfeldt Jonasen (17-04-2002)
Kommentar
Fra : Jan Oksfeldt Jonasen


Dato : 17-04-02 18:34

The MaXx <the_maxx80@hotmail.com> wrote:

> Jeg sad og slog mig selv i hovedet utallige gange da jeg læste dit svar. Det
> er åbenbart for længe siden jeg har arbejdet med SQL.
> Man glemmer dog let denne detalje når access selv accepterer "".
>
....men Java kan hjælpe dig. Tag et kig på java.sql.PreparedStatement,
men en sådan skriver du f.eks.:

PreparedStatement ps = minForbindelse.prepareStatement("SELECT navn FROM
personer WHERE nr = ?");
ps.setInt(etTal);
ResultSet rs = ps.executeQuery();

Teorien lyder at en PreparedStatement er langsommere at oprette end en
"almindelig" Statement, men PS bliver cached (og/eller kompileret) af
serveren, hvilket giver hastighedsforøgelse ved udførsel af samme PS
hvor blot nr variablen bliver ændret.

--
Mvh/re Jan Jonasen
jonasen (at) it (dot) dk

If I wanted culture, I'd eat yogurt.

The MaXx (17-04-2002)
Kommentar
Fra : The MaXx


Dato : 17-04-02 21:43

> PreparedStatement ps = minForbindelse.prepareStatement("SELECT navn FROM
> personer WHERE nr = ?");
> ps.setInt(etTal);
> ResultSet rs = ps.executeQuery();

Ja det kender jeg godt og jeg ved godt det er mere effektiv når du kører
samme statement flere gange. Men jeg har ikke brug for den i mit tilfælde,
men ellers tak for det gode råd.

The_MaXx



Jan Oksfeldt Jonasen (18-04-2002)
Kommentar
Fra : Jan Oksfeldt Jonasen


Dato : 18-04-02 18:52

The MaXx <the_maxx80@hotmail.com> wrote:

> Ja det kender jeg godt og jeg ved godt det er mere effektiv når du kører
> samme statement flere gange. Men jeg har ikke brug for den i mit tilfælde,
> men ellers tak for det gode råd.
>
Det var et dårligt eksempel fra min side. Pointen med indlæget var, at
du ved brug af denne type statement ikke skal tænke på ', " eller noget
helt tredje, men blot kan bruge f.eks. setString(index, streng) på en
statement ala: select * from navneliste where fornavn = ?
Dvs. ingen ' her, det finder driveren selv ud af.

--
Mvh/re Jan Jonasen
jonasen (at) it (dot) dk

If I wanted culture, I'd eat yogurt.

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste