Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSON insert将自动编码到base64中_Java_Mysql_Json_Jdbc_Base64 - Fatal编程技术网

Java JSON insert将自动编码到base64中

Java JSON insert将自动编码到base64中,java,mysql,json,jdbc,base64,Java,Mysql,Json,Jdbc,Base64,我有一个JSON对象,可以插入MySQL数据库 ps = con.prepareStatement("INSERT INTO tableA(a, b, c, d_json)" + " VALUES(?,?,?,cast(? AS JSON))", Statement.RETURN_GENERATED_KEYS); // some code ps.setObject(4, jsonValue); 我插入字符串的哈希映射,如下所示: Map<S

我有一个JSON对象,可以插入MySQL数据库

ps = con.prepareStatement("INSERT INTO tableA(a, b, c, d_json)" +
                    " VALUES(?,?,?,cast(? AS JSON))", Statement.RETURN_GENERATED_KEYS);
// some code
ps.setObject(4, jsonValue);
我插入字符串的哈希映射,如下所示:

    Map<String, String> map = new HashMap<String, String>();
    map.put("key", "value");
    map.put("key1", "value1");
    map.put("key2", "value2");
Map Map=newhashmap();
地图放置(“键”、“值”);
地图放置(“键1”、“值1”);
地图放置(“键2”、“值2”);
但是,json的编码如下所示:

“base64:type15:Ro0abxnyabfqyxzhlnv0awwusgfzae1hcauh2shdfmdrawacrgarvckkacxrocmvz\nag9szhhwp0aaaaaaaaaaaaax3caaaaabaabanzhbhvlmxqabgtletj0aaz2ywx1ztj0\nAANrZXl0AAV2YWx1ZXg=“”

我想插入一个字符串而不是这个。 我在S.O上看到了一些帖子,但我没有找到任何合适的方法来修复它。任何帮助都将不胜感激。
谢谢

Java Mysql驱动程序不支持哈希映射的自动转换。事实上,如果在
setObject
中使用未知类型,它将使用默认的Java序列化将其转换为它可以处理的类型。数据库接收包含序列化哈希映射的字节数组。
cast(?asjson)
将其转换为可以存储在列中的内容,即BASE64编码的字节数组


在将HashMap发送到数据库之前,您需要在Java代码中将其转换为JSON字符串。

您不能直接将Java对象写入MySQL-您需要在将其写入表列之前将其转换为JSON字符串。 根据官方的说法:“如果值是有效的JSON值,则尝试将值插入JSON列成功,如果不是,则失败”

下面是一个例子(杰克逊):

import com.fasterxml.jackson.databind.ObjectMapper;
公开课考试{
私有静态最终ObjectMapper ObjectMapper=新ObjectMapper();
公共静态字符串toJSON(映射映射)引发JsonProcessingException{
返回objectMapper.writeValueAsString(映射);
}
}

另一种选择是创建一个额外的列e,然后简单地将映射写入两列:
map(k,v)=>d(k),e(v)

那么
map
是您的
json'值吗?您在文章中显示的base64包含大量不可打印的字节,它不是
map
的JSON表示形式。事实上,我的问题是,即使我尝试使用在线工具对其进行解码,它也只会返回一些没有任何意义的东西。这有帮助吗?因为我使用了sql方法:cast as json。事实上,我不想太多地转换我的数据,这就是为什么我只是使用hashmap而不是JSON对象。但它显然不起作用,我想知道SQL应该如何将Java对象转换为JSON。非常感谢您回答和解释为什么它不起作用。我接受了皮奥特的回答,但你的回答和他的一样好!
import com.fasterxml.jackson.databind.ObjectMapper;

public class Test {

  private static final ObjectMapper objectMapper = new ObjectMapper();

  public static String toJSON(Map<String, String> map) throws JsonProcessingException {
    return objectMapper.writeValueAsString(map);
  }
}