Hoop dat ik de goede tags heb gebruikt, kan zowel sql, java als jdbc zijn maar denk hoofdzakelijk het laatste.
Ik heb een postgresql database in combinatie met een java programma. Nu wil ik gebruik gaan maken van PreparedStatements maar heb veel tabellen met een serial primary key (automatische nummering).
Wanneer ik dus in een 'kind' van een dergelijke tabel een waarde wil toevoegen moet ik (soms) de nextval() functie gebruiken alleen krijg ik dit niet voor elkaar icm PreparedStatements.
De functie is om de id op te vragen is bijvoorbeeld: (SELECT nextval('table_id_seq'));
Een preparedstatement.setInt(0, "(SELECT nextval('table_id_seq'))") werkt simpelweg niet omdat de variabele geen int is.
Een preparedstatement.setString(0, "(SELECT nextval('table_id_seq'))") werkt ook niet omdat op de achtergrond de waarde toch naar een int wordt geconverteerd met als gevolg een pg_atoi error.
Waarom ik dit doe is ten eerste om af te zijn van escaping van waarden (wat overigens prima werkt, maar preparedstatements leken me gewoon veiliger). Ten tweede worden dezelfde soort queries vaker uitgevoerd en als laatsteworden er ook plaatjes in de database gestopt.
Nu kan ik binary data ook wel, via een omwegje en minder efficient, als text in de database stoppen maar het leek me mooier als ik dit ook direct via een preparedstatement zou kunnen doen.
Is er een manier om dit wel werkend te krijgen? Of moet ik echt los de waarden ophalen om die waarden dan in de preparedstatements te gooien (in dat geval denk ik dat ik het bij het oude laat, alles als een directe query doorvoeren... uiteraard met autocommit uit en in batches).
Ik heb een postgresql database in combinatie met een java programma. Nu wil ik gebruik gaan maken van PreparedStatements maar heb veel tabellen met een serial primary key (automatische nummering).
Wanneer ik dus in een 'kind' van een dergelijke tabel een waarde wil toevoegen moet ik (soms) de nextval() functie gebruiken alleen krijg ik dit niet voor elkaar icm PreparedStatements.
De functie is om de id op te vragen is bijvoorbeeld: (SELECT nextval('table_id_seq'));
Een preparedstatement.setInt(0, "(SELECT nextval('table_id_seq'))") werkt simpelweg niet omdat de variabele geen int is.
Een preparedstatement.setString(0, "(SELECT nextval('table_id_seq'))") werkt ook niet omdat op de achtergrond de waarde toch naar een int wordt geconverteerd met als gevolg een pg_atoi error.
Waarom ik dit doe is ten eerste om af te zijn van escaping van waarden (wat overigens prima werkt, maar preparedstatements leken me gewoon veiliger). Ten tweede worden dezelfde soort queries vaker uitgevoerd en als laatsteworden er ook plaatjes in de database gestopt.
Nu kan ik binary data ook wel, via een omwegje en minder efficient, als text in de database stoppen maar het leek me mooier als ik dit ook direct via een preparedstatement zou kunnen doen.
Is er een manier om dit wel werkend te krijgen? Of moet ik echt los de waarden ophalen om die waarden dan in de preparedstatements te gooien (in dat geval denk ik dat ik het bij het oude laat, alles als een directe query doorvoeren... uiteraard met autocommit uit en in batches).