エスケープしたり引用符を付けたりせずに、ユーザー名をSQLに直接挿入しています。アポストロフィを見逃しただけだと思います。
SQLインジェクションの問題を防ぐために、動的データからSQL文字列定数を挿入しないでください。常に、PreparedStatementを使用してマーカーを挿入してください。
または、値をエスケープしますが、マーカーを使用する方がはるかに安全であり、データベースがコンパイル済みのSQLステートメントをキャッシュできるようにすることでSQLのパフォーマンスが向上します。
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());
注: ヌルチェックの問題をカバーするために回答が拡張されました。
単純な文字列インジェクションを使用している場合、"A='" + name + "'" A='Joe'になります null以外の値の場合、A='null' null値の場合、これは間違いなくあなたが望むものではありません。
パラメータマーカーを使用することにより、?の値 nullにすることができます 、つまりIFNULL(?, Name) 必要な正確な動作を提供します。つまり、?の値を使用します。 nullでない場合、およびNAMEの値 ?のとき nullです。