Hallucinerende AI - ChatGPT suggereert API's die nooit hebben bestaan

Ik was een stuk code aan het debuggen dat een Java.lang.OutOfMemoryError gaf. Na een kort onderzoek ontdekte ik dat de SQL query die de code uitvoerde geen 'WHERE' clausule bevatte, waardoor een grote tabel bijna volledig gedownload werd, waardoor het proces geen geheugen meer had.
De oplossing was eenvoudig en snel: voeg een WHERE-clausule toe aan de SQL-query. Toen dacht ik, als onderdeel van preventief onderhoud, om te controleren waarom deze query zelfs werd uitgevoerd, omdat de parameters aanwezig waren in de code, klaar om te worden ingevoegd in het SQL statement.
Ik wil dat de NamedParameterJdbcTemplate een exception gooit als 'Hey, je had twee parameters moeten hebben in deze query; je hebt er geen!'. Dus vroeg ik ChatGPT om hulp: hoe kan ik vooraf controleren of alle opgegeven parameters hun weg hebben gevonden naar de SQL in de WHERE-clausule?
Hoe controleer je wanneer je jdbctemplate.query uitvoert of alle NamedParameterSource variabelen zijn ingevuld?
Dit is wat het opleverde:
Je kunt controleren of alle
NamedParameterSourcevariabelen zijn gevuld door gebruik te maken van deSqlParameterSourceUtilsklasse die wordt geleverd door Spring framework. Hier is een voorbeeld:
1NamedParameterJdbcTemplate jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
2String sql = "SELECT * FROM my_table WHERE column1 = :param1 AND column2 = :param2";
3MapSqlParameterSource params = new MapSqlParameterSource();
4params.addValue("param1", "value1");
5//params.addValue("param2", "value2"); //Uitgecommentarieerd om een ontbrekende parameter te simuleren
6
7SqlParameterSourceUtils.assertAllParamsSet(params, sql);
8List<MyObject> results = jdbcTemplate.query(sql, params, new MyRowMapper());In dit voorbeeld zal de
assertAllParamsSetmethode eenIllegalArgumentExceptiongooien als een genoemde parameter in de SQL query ontbreekt in hetparamsobject. Hierdoor kun je ontbrekende parameters opvangen voordat je de query uitvoert. Merk op dat deze methode alleen werkt voorNamedParameterJdbcTemplateenSqlParameterSourceobjecten, maar je kunt het aanpassen aan andere typen JDBC templates en parameterbronnen als dat nodig is.
Dus de 'money shot' (sorry voor mijn Frans) is op regel 7. Aangezien ik op zoek ben naar een manier om te controleren (assert) dat al mijn parameters gebruikt (ingesteld) zijn, maakte het lezen van deze codesuggestie me een blije kleine nerd.
Ik ontdekte al snel dat deze API-aanroep, onderdeel van deze helperklasse, niet bestaat; het heeft nooit bestaan. Nadat de IDE allerlei 'niet gevonden' indicaties gaf, besloot ik dit deel van de code op te zoeken, en dit is wat er gebeurde:

(droevige trombone)
Een oude grap van programmeurs is dat je in de problemen zit als er 0 resultaten zijn als je je probleem googelt.
Bah.
Uiteindelijk moest ik dit zelf implementeren in plaats van te verwachten dat de bibliotheek het voor me zou doen. ChatGPT suggereerde een helperklasse en API-aanroep die gewoon niet bestaat: het zou een mooie toevoeging zijn aan de Util, dus dat ga ik misschien doen.
ChatGPT droomde ervan me te helpen; de bot hallucineerde over API's die in een ideale wereld zouden bestaan, alleen niet in de echte wereld.

Softwareontwikkeling ontmoeilijken
Laat ZEN Software uw softwareontwikkeling analyseren en optimaliseren.
Lees ook:

Hallucinerende AI - ChatGPT suggereert API's die nooit hebben bestaan
Ik was een stuk code aan het debuggen dat een Java.lang.OutOfMemoryError veroorzaakte. Na een kort onderzoek ontdekte ik...

Mijn roestige kerst: hoe Rust een plek verdiende naast C++, Java, Python en Go (en me liet ruziën met traits) :christmas_tree::crab:
Om de zoveel jaar verdient een nieuwe taal een vaste plek in je gereedschapskist. Niet omdat hij in de mode is. Niet omd...

Een PWA bouwen in 2026: wat je als React-developer écht moet leren
Heb je al React-applicaties gebouwd, dan valt een Progressive Web App waarschijnlijk reuze mee. De term heeft nog altij...

Software ontwikkelen met behulp van AI en rekening houden met AVG, NIS2 en DORA compliance
Zodra je een coding agent aan je codebase hangt, raak je drie regimes tegelijk. Niet omdat AI apart gereguleerd is, maar...

Waarom ik steeds terugkeer naar games: twee boeken voor op het strand (of aan het zwembad)
Zomer 2025, leesvoer voor aan het zwembad: twee boeken die je gelezen moet hebben over werken in gameontwikkeling....

5 dingen waar je op moet letten als je een website bouwt die écht scoort
Veel SEO-advies klinkt nog altijd alsof het uit 2014 komt. Eindeloze keywordlijstjes, “content is king”, en gepieker ove...
