Avatar billede rwj_defcon1 Nybegynder
21. oktober 2002 - 12:35 Der er 9 kommentarer og
3 løsninger

problemer med insert into...select statement i executeQuery

Har laver følgende statement og det virker i min Query Analyzer:

insert into postnr (postnr, bynavn) values ('1234','Test') select * from postnr where postnr = '1324'

I Query analyzeren får jeg den tubbel tilbage, som jeg beder om.
Men det virker ikke, når jeg forsøger at bruge det i resultset.executeQuery();

Så får jeg følgende fejl:
sun.jdbc.odbc.JdbcOdbcConnection@203b
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Function sequence error

Jeg bruger en MS SQL 2000 db.

Hvordan får jeg det til at virke?
Avatar billede disky Nybegynder
21. oktober 2002 - 12:45 #1
kald dem af to gange

først:
insert into postnr (postnr, bynavn) values ('1234','Test')
Derefter:
select * from postnr where postnr = '1324'
Avatar billede rwj_defcon1 Nybegynder
21. oktober 2002 - 12:47 #2
Ups....
Fejlen er følgende:
java.sql.SQLException: No ResultSet was produced
Avatar billede rwj_defcon1 Nybegynder
21. oktober 2002 - 12:50 #3
Den løsning kan ikke bruger, da det er vigtigt det foregår atomart...
Jeg har tænkt på om det evt. kan være fordi ODBC driveren ikke understøtter denne type sql kald, men det er kun et gæt.
Avatar billede disky Nybegynder
21. oktober 2002 - 12:59 #4
Det er din driver der er problemmet så.

Din tabel med postnummer og bynavn, kan du få hos post danmark, med alle danske postnumre :)
Avatar billede rwj_defcon1 Nybegynder
21. oktober 2002 - 13:05 #5
Findes der så en anden driver, der kan bruges i stedet...
Eller evt. en anden måde at gøre de to kald atomare på?
Det er ikke til postnumre jeg skal bruge det. Det var bare et eksempel.
Avatar billede arne_v Ekspert
21. oktober 2002 - 13:46 #6
Du kan ikke bare fyre 2 SQL sætninger af i et kald.
Avatar billede rwj_defcon1 Nybegynder
21. oktober 2002 - 14:03 #7
Hvad så med denne løsning, ville den gøre kaldene atomare:

public static void main(String args[]) {
    try {
        //Tjekker om odbc driver findes
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    }
    catch (ClassNotFoundException e) {
          System.out.println("Problemer med load af DB driver");
      }

    try {
        //Forbinder til DB'en via ODBC reference "xal"
          String URL = "jdbc:odbc:xal";
              String username = "user";
              String password = "pass";
              DB = DriverManager.getConnection (URL, username, password);
              sql = DB.createStatement();
              ResultSet rs;
              sql.execute("begin transaction");
              sql.execute("insert into postnr (postnr, bynavn) values ('1000','Test')");
              rs = sql.executeQuery("select * from postnr where postnr = '1000'");

              rs.next();
              System.out.println(rs.getString(2));
              sql.execute("commit");
    }
    catch (SQLException e) {
        System.out.println(e);
    }
}
Avatar billede arne_v Ekspert
21. oktober 2002 - 14:21 #8
Måske !

Afhænger af connection transaction isolation level.

Se Connection.setTransactionIsolation.
Avatar billede disky Nybegynder
21. oktober 2002 - 14:47 #9
Hvis noget skal være atomart bruger man transactioner ikke 2 sql i et hug.
Avatar billede di8leva Nybegynder
25. oktober 2002 - 14:17 #10
vad er transcationer?
Avatar billede di8leva Nybegynder
25. oktober 2002 - 14:19 #11
men fejlet ser ut aff vara:
insert into postnr (postnr, bynavn) values ('1234','Test') (HER) select * from postnr where postnr = '1324'                             

der skall vare ett ';' før att æven "select...." skall exekveras.
Avatar billede disky Nybegynder
25. oktober 2002 - 14:22 #12
transactioner sikre at en bestemt gruppe queries udføres.

Hvis en fejler ruller man alle ændringer indenfor denne transaktion tilbage.

f.eks.

en query hæver 1000,- på din bank konto.
serveren crasher.

pengene er ikke på din konto mere, og de er heller ikke landet på min.

havde det været i en transaktion, var hævningen fra din konto blevet annuleret, da indsættelsen på min fejlede.
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