sql >> Databasteknik >  >> RDS >> Mysql

Uppdatera kolumner om indatavärden inte är null, annars ignorera och behåll de befintliga värdena för kolumn i databasen

Du infogar användarnamnet rakt in i SQL-filen utan att fly eller ens citera. Jag tror att du helt enkelt missade apostroferna.

För att förhindra SQL-injektionsproblem, infoga ALDRIG SQL-strängkonstanter från dynamiska data, använd ALLTID PreparedStatement och infoga markörer.

Alternativt kan du undkomma värdena, men att använda markörer är mycket säkrare och förbättrar SQL-prestanda genom att tillåta databasen att cachelagra den kompilerade SQL-satsen.

String updateQuery = "UPDATE " + USER_TABLE +
                       " SET " + USER_TABLE_FIRST_NAME + "=IFNULL(? ," + USER_TABLE_FIRST_NAME + ")," +
                                 USER_TABLE_LAST_NAME + "=?," +
                                 USER_TABLE_ABOUT_ME + "=?," +
                                 USER_TABLE_CITY + "=?," +
                                 USER_TABLE_DOB + "=?" +
                     " WHERE " + USER_TABLE_ID + "=?";
PreparedStatement stmt = conn.prepareStatement(updateQuery);
stmt.setString(1, user.getFirstName());
stmt.setString(2, user.getLastName());
stmt.setString(3, user.getAboutMe());
stmt.setString(4, user.getCity());
stmt.setString(5, user.getDateOfBirth());
stmt.setString(6, user.getUserId());

Obs! Svaret utökats för att täcka problemet med nollkontroll.

När du använder enkel stränginjektion, "A='" + name + "'" blir A='Joe' för ett icke-nullvärde men A='null' för ett nullvärde, vilket definitivt inte är vad du vill ha.

Genom att använda parametermarkörer, värdet på ? kan vara null , vilket betyder att IFNULL(?, Name) kommer att ge det exakta beteende som behövs, d.v.s. att använda värdet för ? när det inte är null, och värdet på NAME när ? är null.



  1. Gruppera rader med hjälp av grupp efter klausul i MySQL

  2. MySQL-fel 1436:Överskriden trådstack, med enkel fråga

  3. Dela funktion i oracle till kommaseparerade värden med automatisk sekvens

  4. Drop Column från Large Table