java.sql.SQLSyntaxErrorException : Syntax error: Encountered "St\u00f6rungen"

标签 java sql encoding utf-8 derby

我正在尝试用一些信息填充我的 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)");

最佳答案

首先使用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%' 给出。)

关于java.sql.SQLSyntaxErrorException : Syntax error: Encountered "St\u00f6rungen",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59990202/

相关文章:

mysql - 如何只显示当前的记录

python - 如何使用我自己的语料库文本创建和拟合 vocab.bpe 文件(GPT 和 GPT2 OpenAI 模型)?

java - 嵌套 json 上的 Karate DSL 断言

java - 在jsp上显示来自sql表的数据的其他一些方法

mysql - 内部连接两个表

Node.js 使用 Express 在 HTTP POST 上以 multipart/form-data 形式写入 jpeg 文件

PHP + MySQL + 西类牙语

java - JPA 映射模型返回带有复合键的空元素

java - 原始类型导致的代码重复 : How to avoid insanity?

Java JTDS 到 SQL Server 2000