Avatar billede zulaff Nybegynder
15. november 2007 - 15:58 Der er 7 kommentarer og
1 løsning

Sletter kun første tilfælde fra database

Jeg forsøger at slette en række kolonner fra databasen, ved hjælp af en lykke der gentagne gange kalder funktionen deletePresence (følger). Problemet er at det kun er det første tilfælde det lykkedes mig at slette, de andre bliver ikke slettet. Jeg har prøvet at bytte rundt på rækkefølgen og da er det ikke den samme kolonne der bliver slettet, det er altid den første som bliver kaldt. Er der nogen der kan hjælpe?

    public synchronized void deletePresence(Presence presence) {
        Connection connection = null;
        try {
           
            InitialContext ctx = new InitialContext();
            DataSource dataSource = (DataSource) ctx.lookup("jdbc/pocDS");
            connection = dataSource.getConnection();
            Statement statement = connection.createStatement();
            statement.execute("delete from KF.KNT where id='" + presence.getId() + "'");
            connection.close();
           
        } catch (NamingException e) {
            throw new WrappedException(Layer.BUSINESS, e);
        } catch (SQLException e) {
            throw new WrappedException(Layer.BUSINESS, e);
        }
    }

Jeg får også følgende fejl i min log fil, som jeg tænker kunne være relateret til det, men jeg er ikke sikker på det ikke var der før:

[07-11-15 15:56:17:900 CET] 00000011 InternalOracl I  DSRA8203I: Database product name : Oracle
[07-11-15 15:56:17:900 CET] 00000011 InternalOracl I  DSRA8204I: Database product version : Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
[07-11-15 15:56:17:900 CET] 00000011 InternalOracl I  DSRA8205I: JDBC driver name  : Oracle JDBC driver
[07-11-15 15:56:17:900 CET] 00000011 InternalOracl I  DSRA8206I: JDBC driver version  : 10.2.0.1.0
[07-11-15 15:56:17:916 CET] 00000011 InternalOracl I  DSRA8212I: DataStoreHelper name is: com.ibm.websphere.rsadapter.Oracle10gDataStoreHelper@4ec24ec2.
[07-11-15 15:56:17:916 CET] 00000011 WSRdbDataSour I  DSRA8208I: JDBC driver type  : ""
[07-11-15 15:56:17:931 CET] 00000011 WSRdbXaResour E  DSRA0304E:  XAException occurred. XAException contents and details are: The cause is              : null.
[07-11-15 15:56:17:931 CET] 00000011 WSRdbXaResour E  DSRA0302E:  XAException occurred.  Error code is: XAER_RMERR (-3).  Exception is: <null>
[07-11-15 15:56:17:947 CET] 00000011 XARminst      E  WTRN0037W: The transaction service encountered an error on an xa_recover operation. The resource was com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl@79207920. The error code was XAER_RMERR. The exception stack trace follows: javax.transaction.xa.XAException
    at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java:526)
    at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.recover(WSRdbXaResourceImpl.java:964)
    at com.ibm.ws.Transaction.JTA.XARminst.recover(XARminst.java:138)
    at com.ibm.ws.Transaction.JTA.XARecoveryData.recover(XARecoveryData.java:687)
    at com.ibm.ws.Transaction.JTA.PartnerLogTable.recover(PartnerLogTable.java:524)
    at com.ibm.ws.Transaction.JTA.RecoveryManager.resync(RecoveryManager.java:1830)
    at com.ibm.ws.Transaction.JTA.RecoveryManager.run(RecoveryManager.java:2509)
    at java.lang.Thread.run(Thread.java:797)
Avatar billede arne_v Ekspert
15. november 2007 - 16:13 #1
Hvilken transaction kontekst kaldes den metode i ?

Ingen ? EJB ?

Hvis ingen transaction kontekst: Har du checket om auto commit er off og du derfor skal committe ?
Avatar billede zulaff Nybegynder
15. november 2007 - 16:16 #2
Jeg har ikke selv oprettet database, mm. så jeg er ikke helt sikker på hvad du mener med spørgsmålet, men det er en EJB metoden kaldes igennem.
Avatar billede zulaff Nybegynder
15. november 2007 - 16:33 #3
Jeg har indsat

connection.setAutoCommit(true);

ind lige efter connectionenen er blevet oprettet, men det hjælper ikke, så det var nok ikke det der var galt.
Avatar billede teepee Nybegynder
16. november 2007 - 08:30 #4
Er det ikke noget med at din sql er ikke god, og da du ikke lukker din connection i dine exception handler så er den stadig åben når du kalder proceduren igen? Anyway id er sjældent et varchar felt, så hvad skal enkeltplingerne til for?
Avatar billede zulaff Nybegynder
16. november 2007 - 12:02 #5
Du har ret i at plingerne ikke var nødvendige, men jeg havde brugt dem et andet sted hvor det ikke skabte problemer og det har ikke hjulpet efter at jeg har fjernet dem.

Nu ser SQLen som den bliver kaldt første gang den kører igennem således ud:

delete from KF.KNT where id=280
Avatar billede teepee Nybegynder
16. november 2007 - 12:29 #6
det undrer mig bare at der ikke er nogle ora-fejl i stack tracet
Avatar billede zulaff Nybegynder
16. november 2007 - 13:28 #7
Jeg fandt problemet, det lå et helt andet sted og havde ikke noget med Databasen at gøre. Tusind tak for hjælpen alligevel begge to. Læg endelig et svar, så jeg kan give jer point.

Jeg ved stadig ikke helt hvorfor der kommer "XAException occurred" i loggen, så hvis I har nogle ideer der er de meget velkomne.
Avatar billede zulaff Nybegynder
18. februar 2008 - 00:49 #8
Da der ikke er kommet nogle svar, lukker jeg nu spørgsmålet.
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
Computerworld tilbyder specialiserede kurser i database-management

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