java - 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)");
解决方案
首先使用一个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%'
。)
推荐阅读
- powershell - 获取 get-wmiobject 的每个对象作为输出
- python - 通过 PyExifTool 调用 exiftool 时出现 WSAStartup 错误 (10093)
- javascript - 在 ReactJs 中使用 NodeJS API 登录失败
- python-3.8 - IndentationError:预期输出
- phpcs - phpcs:引用的嗅探“WordPress”不存在
- ruby-on-rails - Ruby on Rails - 刷新浏览器时没有路由匹配 [GET] "/signup"
- firebase - 在 Firebase Auth 自定义声明中存储 JWT 刷新令牌是否安全?
- c# - 输入字符串“x”不是 JsonConvertDeserializeObject 的有效数字错误
- elisp - 底部显示缓冲区以弹出消息
- html - 用 selenium、python 解析“进一步阅读”