Avatar billede bgo Nybegynder
17. maj 2004 - 18:55 Der er 12 kommentarer og
1 løsning

INSERT med autonummer retur

Jeg skal have lavet en metode der sender en INSERT-kommando til en Access-database. Problemmet er, at jeg samtidig skal have værdien fra autonummer-kollonen fra den netop oprettede række.

Hvordan pokker gør jeg dét?

bgo
PS: Har ikke den store erfaring med SQL eller jdbc
Avatar billede thomas_yde Nybegynder
17. maj 2004 - 19:04 #1
Der er noget med en SELECT LAST_INSETED du kan prøve at søge på den.

men jeg plejer at "SELECT id LIMIT 1 ORDER BY id DESC".
Avatar billede bgo Nybegynder
17. maj 2004 - 19:08 #2
hvad betyder LIMIT 1 i denne sammenhæng?
Avatar billede arne_v Ekspert
17. maj 2004 - 19:14 #3
SELECT @@IDENTITY

(ligesom i SQL Server)

Eksempel:

import java.sql.*;

public class AutoTest {
    public static void main(String[] args) {
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            Connection con = DriverManager.getConnection("jdbc:odbc:TestMSAccess", "", "");
            Statement stmt = con.createStatement();
            stmt.executeUpdate("INSERT INTO AutoTest (Data) VALUES ('Test')");
            ResultSet rs = stmt.executeQuery("SELECT @@IDENTITY");
            while(rs.next()) {
                System.out.println(rs.getInt(1));
            }
            stmt.close();
            con.close();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
Avatar billede arne_v Ekspert
17. maj 2004 - 19:14 #4
Tabel strukturen er:
  ID AutoNumber
  Data Text
Avatar billede arne_v Ekspert
17. maj 2004 - 19:15 #5
JDBC 3.0 har muligheden stmt.getGeneratedKeys(), men desværre understøtter JDBC-ODBC
bridgen ikke det.
Avatar billede arne_v Ekspert
17. maj 2004 - 19:16 #6
"SELECT id LIMIT 1 ORDER BY id DESC" virker kun i single user/thread sammenhæng, så
den kan normalt ikke anbefales.
Avatar billede thomas_yde Nybegynder
17. maj 2004 - 19:26 #7
Ah ja.
arne_v java er smart :)

men jo kun single use, ellers risikere du at få den næste insert i din tabel, hvis der er 2 brugere der submitter på næsten samme tid...list uheldigt.
Avatar billede arne_v Ekspert
17. maj 2004 - 19:28 #8
Jeg tror iøvrigt at det er MySQL LAST_INSERT_ID() du kunne huske
Avatar billede bgo Nybegynder
17. maj 2004 - 20:36 #9
arne_v:

det lyder lidt som om SELECT @@IDENTITY virker til flerbrugersystemer, er det korrekt?

det ville nemlig være det ideelle, og grunden til at jeg stillede dette spørgsmål ;-) Det skal nemlig senere kunne bruges til en løsning der fungerer på nettet:)
Avatar billede arne_v Ekspert
17. maj 2004 - 20:38 #10
Ja - det bør den gøre.
Avatar billede bgo Nybegynder
17. maj 2004 - 20:51 #11
lyder rigtig godt :)
Avatar billede thomas_yde Nybegynder
18. maj 2004 - 08:43 #12
arne_v ved du om .NET også kan returnere et ResultSet som java gør i overstående eksempel?
Avatar billede arne_v Ekspert
18. maj 2004 - 20:31 #13
Jeg formoder at det er stmt.getGeneratedKeys() du spørger til (SELECT @@IDENTITY
virker jo naturligvis).

Ikke så vidt jeg ved.

Muligvis er Microsofts interesse i database uafhængig kode ikke så stor.
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