[PostgreSQL] INSERT update niet zonder error *

Pagina: 1
Acties:

  • xos
  • Registratie: Januari 2002
  • Laatst online: 26-03 10:21
Ik ben bezig een servlet met een postgresql the laten communiceren. Hiervoor gebruik ik de jdbc connectionpool van de jdbc.postgresql.org pagina (pg73jdbc3.jar). Een SELECT query werkt gewoon goed, het probleem ontstaat op het moment dat ik data wil invoegen of wil updaten. De code welke ik op dit moment gebruik in mijn test servlet is:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class TestSQL extends HttpServlet {
    
    Jdbc3PoolingDataSource source = new Jdbc3PoolingDataSource();

    public void init() {
        
        source.setDataSourceName("testSQL");
        source.setServerName("localhost");
        source.setDatabaseName("db-name");
        source.setUser("db-user");
        source.setPassword("db-pass");
        source.setMaxConnections(10);
    }
.....

Connection con = null;
        
        try {
            con = source.getConnection();
            
            Statement stm = con.createStatement();
            stm.setQueryTimeout(5);

                       int query = stm.executeUpdate("UPDATE test SET test='blaat' WHERE test='text'");
            } catch (Exception e) {
                out.println(e.printStackTrace());
            }


Het vreemd is nu ik geen enkele error te voorschijn krijg en dat query idd het juiste aantal record wat update zou moeten zijn bevat (invoer via het psql programma werkt goed). Alleen in de database is niks geupdate. Hetzelde geld voor een insert query. int query toont netjes 1 maar er wordt niks ingevoerd.

Als database user gebruik ik momenteel de database superuser om te testen zodat rechten geen probleem moeten zijn. Ik heb het geprobreerd met enkele en dubbele haakjes escaped al dan niet op meerder plekken maar mijn ideeen raken inmiddels op. De code voor de test tabel welke ik gebruik is:
code:
1
2
3
4
5
6
CREATE TABLE public.test
(
  test text
) WITHOUT OIDS;
GRANT ALL ON TABLE public.test TO public;
GRANT ALL ON TABLE public.test TO pgsql;


Misschien zit ik wel in het verkeerde forum en is er iets mis in de instellingen van de database. De enige veranderingen welke ik heb gedaan aan de standaard configuratie is in de config file pg_hba.conf tcp_sockets op true gezet. Mijn inziens zit het probleem ook niet in het maken van de connectie maar ergens anders maar waar :? Misschien zit er ergens een fout in het gebruik van transacties omdat postgresql standaard van elke query een transactie maakt.

Hopelijk kan iemand mij verder op weg helpen, alvast bedankt...

Gebruikte software:
freebsd-current
tomcat 5.0.12
postgresql 7.3.4

Verwijderd

Java:
1
2
3
4
5
6
} catch (Exception e) {
  // helaas, printStackTrace schrijft naar de std out en returned noppes
  // out.println(e.printStackTrace());
  // dit werkt vast beter
  out.println(e.getMessage());
}

[ Voor 16% gewijzigd door Verwijderd op 26-11-2003 14:00 ]


  • Akerboom
  • Registratie: Juni 2001
  • Laatst online: 26-05 08:56

Akerboom

Codito, ergo sum

Zit is misschien toch een error in de query en moet je die zoals in php laten zien met mysql_error(); oid?

my 2 cents...

  • xos
  • Registratie: Januari 2002
  • Laatst online: 26-03 10:21
Verwijderd schreef op 26 november 2003 @ 13:59:
Java:
1
2
3
4
5
6
} catch (Exception e) {
  // helaas, printStackTrace schrijft naar de std out en returned noppes
  // out.println(e.printStackTrace());
  // dit werkt vast beter
  out.println(e.getMessage());
}
Ik had mijn logboekjes even gecontroleerd voor dit topic te posten ;)

Verwijderd

I don't see any commit happening. If you want the changes to be final, you need to commit them. The difference between psql and jdbc can be explained by the fact that by default psql runs in autocommit mode (each statement is automatically commited when executed), and it appears that your jdbc is running in non-autocommit mode (see setAutoCommit()).
Dit vond ik hier. Zelfde probleem. Blijkbaar moet je ff commit() doen.

[ Voor 190% gewijzigd door Verwijderd op 26-11-2003 14:22 ]


  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Waarschijnlijk heb je een probleem met autocommit. Als je een expliciete transaction start, je query draait en dan commit (kan zowel via JDBC als SQL), werkt het dan wel?
Je kan ook even kijken of de connectie waar je de update over hebt gedraait nog RowExlusiveLocks heeft (select * from pg_locks), dat is een teken van een transactie die niet gecommit is.

  • xos
  • Registratie: Januari 2002
  • Laatst online: 26-03 10:21
Idd hartelijk bedankt fladder en jochemd. Het was idd een commit probleem wat mij al anderhalve dag bezig hield :'(. Nu werkt het perfect.
Pagina: 1