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
NamedParameterSource
variabelen zijn gevuld door gebruik te maken van deSqlParameterSourceUtils
klasse 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
assertAllParamsSet
methode eenIllegalArgumentException
gooien als een genoemde parameter in de SQL query ontbreekt in hetparams
object. Hierdoor kun je ontbrekende parameters opvangen voordat je de query uitvoert. Merk op dat deze methode alleen werkt voorNamedParameterJdbcTemplate
enSqlParameterSource
objecten, 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:
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.
Read more:
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...
AI is het ontbrekende stukje van de productiviteitspuzzel
Vandaag wil ik betogen dat Kunstmatige Intelligentie (AI) het ontbrekende stukje van de productiviteitspuzzel is, een re...
Threads vs Twitter: De sociale mediastrijd van het decennium - wie zal als winnaar uit de bus komen
In een felle confrontatie op sociale media heeft Mark Zuckerberg, CEO van Meta, een krachtige klap uitgedeeld aan 'Chief...
Zeg maar dag tegen frustratie: Met de ZEN Software Plugin wordt het labelen van afbeeldingen een fluitje van een cent!
WordPress biedt bedrijven, creatieve enthousiastelingen en contentmakers uitgebreide mogelijkheden met zijn gebruiksvrie...
ChatGPT verbannen van je werkplek?
Innovaties zoals ChatGPT en AI hebben een transformatie ingezet in verschillende industrieën, waardoor de productiviteit...
Programmeur frustratie: Yak Shaving
De term "yak shaving" in de programmering komt uit een aflevering van de populaire tekenfilm "Ren & Stimpy" uit de jaren...