提问者:小点点

SQL假命令,Java代码和SQL?希望有人能帮我


我对MySQL代码有问题。我认为问题是“字符串文件名”,我需要在SQL中引用它。

String query = "insert into warenliste (Artikel_ID, Artikelname, Anzahl, Hochfrequent) values ("+arikel_ID+", "+artikelname+", "+anzahl+", "+hochfrequent+")"

正常的SQL命令说:插入warenliste(Artikel_ID, Artikelname,Anzahl,Hoch频繁)值(123,"name",5,0);

-

完整代码:

public void setWareHinzu(int arikel_ID, String artikelname, int anzahl, boolean hochfrequent) {

    try {
        String query = "insert into warenliste (Artikel_ID, Artikelname, Anzahl, Hochfrequent) values ("+arikel_ID+", "+artikelname+", "+anzahl+", "+hochfrequent+")";
        st.executeUpdate(query);

    }
    catch(Exception e) {
        System.out.println(e);
    }

}

共1个答案

匿名用户

你不能在SQL查询中包含这样的输入。想象一下,发送的文件名是字符串,不管是什么;DROP DATABASE warenliste CASCADE;--

如果您要运行您的代码…您的数据库将被擦除。

无法正确逃逸。解决方案在于准备语句

try (PreparedStatement ps = connection.prepareStatement("INSERT INTO warenliste (Artikel_ID, etc) VALUES (?, ?)")) {
    // Note the question marks above: They mark where the variables go. Do not quote them.
    ps.setInt(1, artikel_ID);
    ps.setString(2, artikelname);
    ... the other vars go here.
    ps.executeUpdate();
}

此外,在javaweWriteVariableNamesLikeThis中,not_like_this,它是“artikel”而不是arikel,异常包含至少4个有趣的信息位,仅使用e. printStackTrace(),您将[A]丢弃4个有趣位中的3个,并且[B]随着代码继续运行,您将获得一系列错误。解决此问题的正确方法是声明您的方法throws SQLException。请注意,您的公共静态void main可以(并且应该!)被声明为throws Exception