首页 > 解决方案 > java.sql.SQLSyntaxErrorException:语法错误:遇到“St\u00f6rungen”

问题描述

我正在尝试用一些信息填充我的 Derby 数据库,但我不断收到此错误..

我已经将我的项目编码为 UTF-8,但我的 Derby 数据库似乎不理解那些 -> "Ä,Ö,Ü"

我怎样才能解决这个问题 ?我不想输入“ae,oe,ue”

这是事情开始发生的示例:

st.executeUpdate("Insert into Scoarboard(Name,Wirkung,Ursprung,Stoffklasse,Schadenspot,Risiken,Legalitaet,NutzungMedi,NutzungGenuss,Konsum) "
                + "values (- Cannabis (Marihuana),- Sedativa/Hypnotika,- biogenpflanzlich,- Cannabinoide,"
                + "- 20/100,- Schwindel/übelkeit\r\n- Müdigkeit\r\n- Herzrasen\r\n- psychische Störungen,"
                + "- legal (verschreibungspflichtig),- Schmerzlindernd\r\n- Angstlösend\r\n- Reduziert Wachstum von Tumorzellen\r\n"
                + "- Entkrampfend\r\n- Antipsychotisch\r\n,- Appetitanregend\r\n- Euphorisierend\r\n- Entspannend\r\n,"  
                + "- Lunge (Joint)\r\n- Magen-Darm-Trakt (Gebäck)\r\n- Mundschleimhäute (Tinktur)\r\n)");

标签: javasqlencodingutf-8derby

解决方案


首先使用一个PreparedStatement. 这允许输入字段,例如整数的 int。它还对包含撇号、反斜杠或换行符 ( \r\n) 的字符串进行转义,并有助于处理特殊字符。

String sql = "INSERT INTO Scoarboard(Name,Wirkung,Ursprung,Stoffklasse,Schadenspot,Risiken,"
                + "Legalitaet,NutzungMedi,NutzungGenuss,Konsum) "
                + "VALUES(?,?,?,?,?,?,?,?,?,?)";
try (PreparedStatement st = connection.prepareStatement(sql)) {
    st.setString(1, "Cannabis (Marihuana)");
    st.setString(2, "Sedativa/Hypnotika");
    st.setString(3, "biogenpflanzlich");    
    st.setString(4, "Cannabinoide");
    st.setString(5, "20/100");
    st.setString(6, "Schwindel/übelkeit\r\nMüdigkeit\r\nHerzrasen\r\npsychische Störungen");
    st.setString(7, "legal (verschreibungspflichtig)");
    st.setString(8, "Schmerzlindernd\r\nAngstlösend\r\n"
                + "Reduziert Wachstum von Tumorzellen\r\n"
                + "Entkrampfend\r\n- Antipsychotisch\r\n");
    st.setString(9, "Appetitanregend\r\nEuphorisierend\r\nEntspannend\r\n");
    st.setString(10, "Lunge (Joint)\r\nMagen-Darm-Trakt (Gebäck)\r\n"
                + "Mundschleimhäute (Tinktur)\r\n");

    st.executeUpdate();
}

数据库表列必须能够保存特殊字符,并且 java 编译器可能错误地使用其他编码作为编辑器。但是让我们假设一切都好。现在它应该可以工作了。

try-with-resources 语法try(X x = open()) { ... }确保x即使在内部返回或异常时也关闭。

(SQL 中的字符串常量通常用撇号给出WHERE Name LIKE 'Can%'。)


推荐阅读