Попытка удалить кортеж, используя подготовленное утверждение - PullRequest
1 голос
/ 11 мая 2019

Я пытаюсь использовать пользовательский ввод, чтобы удалить кортеж из песни атрибута, но я получаю сообщение об ошибке: java.sql.SQLSyntaxErrorException: Unknown column 'Paragould' in 'where clause' Вот мой код ниже

public static void removeSong(){
        Faker faker=new Faker();
        Statement stmt=null;
        Connection conn=null;

        Scanner in=new Scanner(System.in);
        System.out.println("Which song would you like to remove?");
        String songName=in.next();
        String removeSongStmt="DELETE FROM allSavedSongs WHERE song="+songName+" AND userID="+currentUserID;
        try {
            conn=DriverManager.getConnection(DB_URL,USER,PASS);
            PreparedStatement preparedStmt=conn.prepareStatement(removeSongStmt);
            preparedStmt.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

1 Ответ

2 голосов
/ 11 мая 2019

Строки должны быть в кавычках, например:

        String removeSongStmt="DELETE FROM allSavedSongs WHERE song='"+songName+"' AND userID='"+currentUserID+"';";

РЕДАКТИРОВАТЬ: Этот анализ очень небезопасен, потому что строка может содержать любой вид мусора. Они также могут содержать команды SQL, которые будут выполнять и навредить вам. Вы должны использовать силу подготовленных утверждений, например:

        conn=DriverManager.getConnection(DB_URL,USER,PASS);
        PreparedStatement preparedStmt=conn.prepareStatement("DELETE FROM allSavedSongs WHERE song=? AND userID=?");
        preparedStmt.setString(songname);
        preparedStmt.setString(currentUserID);
        preparedStmt.execute();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...