MySQL存储文本和图片的方法

Oracle中山学院文本数据类型

在MySQL5.7.8今后起头帮助生机勃勃种可高效获取JSON文本中数据的原生JSON类型,该品种具备以下优点:

Clob 长文本类型 Blob 二进制类型

仓库储存时自动验证,验证不经过将报错
更加好的囤积构造。选拔生机勃勃种针对报告读取JSON文本成分的内部布局举行仓库储存。新的服务器是以二进制的格式读取几个JSON文本,并非以字符串格式读取然后打开转移。这种二进制格式允许服务器在文本中通过键只怕数组索引获取其子对象而不需求读取全体值

MySQL数据库

此外,系统对JSON格式做了有的限定:

Text 长文本类型 TINYTEXT: 256 bytes TEXT: 65,535 bytes = ~64kb MEDIUMTEXT: 16,777,215 bytes = ~16MB LONGTEXT: 4,294,967,295 bytes = ~4GBBlob 二进制类型

JSON文本的最大尺寸取决有类别常量:max_allowed_packet。该值仅在服务器实行存款和储蓄的时候实行限定,在内部存款和储蓄器中开展总计的时候是允许超越该值的。
JSON列不可有暗中同意值
JSON列与其余二进制类型列同样是回天乏术创造索引。但是足以从JSON列中所存储的公文中或多或少表列值进行创办索引。MySQL最优调整器同样在通过JSON表明创造的目录中实行询问。

例如:

在插入json数据的时候遭遇的难题

建表

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 ‘{
CREATE TABLE test( id INT PRIMARY KEY AUTO_INCREMENT, content LONGTEXT, -- 文本字段 img LONGBLOB -- 图片字段);

插入代码

存款和储蓄文本时是以字符类型存款和储蓄,存款和储蓄图片时是以二进制类型存款和储蓄,具体运用的安装参数方法,和获取数据方法分化。

insert into `players` (`id`,`player_and_games`) values(1,{ "id":1, "name":"aaa", "games_played":{ "Battlefiedld":{ "weapon":"adsf", "level":20 }, "Crazy":{ "weapon":"adsf", "level":20 } }})

例如:

存在难题,json未有用引号,正确的主意如下

// 存储文本时// 存储时,设置参数为字符流 FileReader readerpstmt.setCharacterStream(1, reader);// 获取参数时// 方式1:Reader r = rs.getCharacterStream("content");// 获取长文本数据, 方式2:System.out.print(rs.getString("content"));// 存储二进制图片时 // 设置参数为2进制流 InputStream in pstmt.setBinaryStream(1, in);// 获取2进制流InputStream in = rs.getAsciiStream("img");

/** * 保存照片 * */@Testpublic void test2(){ String sql = "insert into test(img) values()"; try{ con = JDBCUtil.getConnection(); pstmt = con.prepareStatement(sql); // 设置参数 // 获取文本 File file = new File("f:/a.jpg"); InputStream in = new FileInputStream(file); // 设置参数为2进制流 pstmt.setBinaryStream(1, in); // 执行sql pstmt.executeUpdate(); in.close(); }catch (Exception e) { e.printStackTrace(); }finally{ try { JDBCUtil.close(con, pstmt); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }}/** * 获取照片 * */@Testpublic void test3(){ String sql = "select * from test where id=;"; try{ con = JDBCUtil.getConnection(); pstmt = con.prepareStatement(sql); // 设置参数 pstmt.setInt(1, 2); // 执行查询 rs = pstmt.executeQuery(); while(rs.next()){ byte[] buff = new byte[1024]; InputStream in = rs.getAsciiStream("img"); int l=0; OutputStream out = new FileOutputStream(new File("f:/1.jpg")); while((l=in.read(buff))!=-1){ out.write(buff, 0, l); } in.close(); out.close(); } }catch (Exception e) { e.printStackTrace(); }finally{ try { JDBCUtil.close(con, pstmt); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
insert into `players` (`id`,`player_and_games`) values(1,'{ "id":1, "name":"aaa", "games_played":{ "Battlefiedld":{ "weapon":"adsf", "level":20 }, "Crazy":{ "weapon":"adsf", "level":20 } }}')

总结

总结

上述便是那篇文章的全部内容了,希望本文的内容对我们的求学可能办事有着一定的参照学习价值,多谢我们对剧本之家的支撑。要是您想打听愈来愈多相关内容请查看下边相关链接

以上便是那篇文章的全体内容了,希望本文的剧情对大家的就学或许干活富有一定的参谋学习价值,感谢大家对剧本之家的扶植。假设您想询问愈来愈多相关内容请查看下边相关链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注