java - 尝试使用准备好的语句删除元组

标签 java mysql database

我正在尝试使用用户输入从属性歌曲中删除一个元组,但我收到一条错误消息 java.sql.SQLSyntaxErrorException:“where 子句”中的未知列“Paragould” 下面是我的代码

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();
        }

    }

最佳答案

字符串必须用引号引起来,如下所示:

        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();

关于java - 尝试使用准备好的语句删除元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56093841/

相关文章:

java - 在java程序中集成谷歌输入工具

java - ArrayList 对象 - 构造函数如何工作,它们的时间复杂度是多少?

java - 如何强制 log4j 从非 src 文件夹加载 xml 配置?

mysql - 对显示所有结果的多列求和

sql - 如何在数据库中表示一个实体的许多相似属性?

java - 如何在Java程序中使用Weka的朴素贝叶斯

MySql大数据操作(超3000万条数据记录)——最优方式

MySQL - 如何使用左连接从 on 子句中的连接表中精确获取一行?

database - 查找没有连接匹配的记录

database - 第三范式算法