Archief - Java: PreparedStatement shizzle

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Xtralecherus

Legacy Member
yo

Heb een een soort van update query gemaakt voor een record in men access database aan te passen maar helaas werkt deze niet.

Een access bestand met 1 tabel met volgende velden: Id, achternaam, voornaam, adres, woonplaats, postcode. (wetend dat Id autonumber is en zelf aangemaakt wordt als er iets in de volgende velden word gezet.

Adres a is een klasse met constructor(achternaam, voornaam, adres, wnpl, postcode) postcode is enige variabele die een integer is.

weet niet precies wat er niet klopt

melding krijg ik:[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.

Code:
public boolean bewerkAdres(Adres a)
    {

        int user = a.getID();                                                                                                     
        final String UPDATE_QUERY = "UPDATE adresbestand SET achternaam = ?, voornaam = ?, adres = ?, woonplaats = ?, postcode = ?  WHERE Id='"+ user +"'";
        try{
            
            Connection conn = DriverManager.getConnection( "jdbc:odbc:" + databaseName,"","");
            
            PreparedStatement stmt = conn.prepareStatement(UPDATE_QUERY);
            try
            {
                
                stmt.setString(1, a.getAchternaam() );
                stmt.setString(2, a.getVoornaam() );
                stmt.setString(3, a.getAdres() );
                stmt.setString(4, a.getWoonplaats() );
                stmt.setInt(5, a.getPostcode() );
                //stmt.setInt(6, a.getID() ); 
                stmt.executeUpdate();
                
            }
                catch (SQLException e)
                {
                    System.err.println("databankfout"+ e);
                }
                finally
                {
                    stmt.close();
                    conn.close();
                }
            }
            
        
            catch (SQLException e) {
                System.err.println("databankfout"+ e);
            }
        
        return true;
    }

Xtralecherus

Legacy Member
ok nvm dit, heb de oplossing gevonden blijkt dat men Id op 0 bleef steken aangezien die geen waarde heeft en ook niet in de constructor zat, zucht! :f gefixed door bewerkAdres(Adres a, int user) van te maken en in de methode die variabele verwijdert en natuurlijk de waarde van Id opgeslagen.

edit:

WHERE Id='"+ user +"'"; -> werkte niet correct aangezien dak hier als output '1' kreeg wat dus niet overkomt met de Id in de tabel, oplossing gewoon WHERE Id="+ id +""; van gemaakt! kut databasen :).

Just me

Legacy Member
L3ThaL zei:
edit:

WHERE Id='"+ user +"'"; -> werkte niet correct aangezien dak hier als output '1' kreeg wat dus niet overkomt met de Id in de tabel, oplossing gewoon WHERE Id="+ id +""; van gemaakt! kut databasen :).

Misschien beetje late reactie, maar hier moet je wel mee oppassen. De manier die jij nu gebruikt doet je hele prepared statement teniet. Je zou in de UPDATE_QUERY ook een vraagteken moeten voorzien voor de id, anders laat je de deur openstaan voor sql injection en is het gebruik van een prepared statement nutteloos.

Xtralecherus

Legacy Member
Goed dat ik het weet, al is het maar een taak voor front-end :p.

ok kheb WHERE Id = ? van gemaakt en dan nog een extra stmt.setint
stmt.setInt(6, user)

De user is eigenlijk het autonumber Id in men database. Daarmee kon ik op easy wijze bepaalde record zoeken die uniek is door dat getal en aanpassen.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan