java - Gson序列化后MySql给出语法错误
问题描述
我似乎对 Gson 序列化有问题。序列化后,当我尝试将其保存到数据库中时,我收到来自 mysql 的语法错误。
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''{"nexus_loc":{"world":"world","x":300.0,"y":63.0,"z":428.0,"pitch":0.0,"yaw":0.' at line 1
这是保存功能的代码。
PreparedStatement stmt = conn.prepareStatement("INSERT INTO %table VALUES (?,?) ON DUPLICATE KEY UPDATE `data` = VALUES(?)".replace("%table",tablename));
stmt.setString(1,key);
stmt.setString(2,serialize(value,type));
stmt.setString(3,serialize(value,type));
stmt.executeUpdate();
stmt.close();
这是我们用来创建表的字符串
String tablequery = "CREATE TABLE IF NOT EXISTS %table (`id` CHAR(36) PRIMARY KEY, `data` TEXT);".replace("%table",tablename);
解决方案
VALUES()
部分不需要UPDATE
。
所以而不是
"INSERT INTO %table VALUES (?,?) ON DUPLICATE KEY UPDATE `data` = VALUES(?)"`
尝试
"INSERT INTO %table VALUES (?,?) ON DUPLICATE KEY UPDATE `data` = ?"
推荐阅读
- ios - 我可以将我的 iOS 应用程序本地化为西班牙语或德语,同时将手机的其余部分保持为英语吗?
- java - Spring数据JPA JPQL选择子属性的位置
- c# - 如何在 ASP.NET Core 中缓存请求?
- amazon-web-services - Lambda 代理集成是反向代理吗?
- node.js - 无法使用 npm 安装引导程序
- javascript - TypeScript 再次结合 *.js + *.d.ts?
- ios - 如何通过 UITabBarController 将 indexPathForSelectedRow 传递到 UITabView?
- ionic-framework - 错误:无效数据,chunk 必须是字符串或缓冲区,而不是运行 ionic -v 时的对象
- java - 强制杰克逊将特定属性反序列化为特定的原始类型
- javascript - p5.js 的绘图功能是如何工作的?