数据库存取BLOB类型音乐文件的过程及常见错误

数据库存取BLOB类型音乐文件的过程及常见错误


数据库端的准备工作:

新建表,用来存放音乐文件:mymusic
第一列:id 类型:int
第二列:music 类型:blob
在这里插入图片描述


将音乐文件存入数据库

/*** */
package cn.zxm.jsp;import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;/*** @author Miao**/
public class JDBCBlobTest {//通过JDBC存储二进制类型(音乐)//BLOB//存入音乐的内容//1.先通过 pst 的 ? 代替音乐内容//2.在通过		pst.setBinaryStream(2, in, (int)file.length());将上一步的? 代替成 二进制数据流 public static void main(String[] args) throws Exception {//1.注册驱动Class.forName("com.mysql.jdbc.Driver");//反射//3.获取数据库连接对象Connectionjava.sql.Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsp_jdbc","root", "root");//4.定义sqlString sql = "insert into mymusic  values(?,?)";//5.获取执行sql语句的对象StatementPreparedStatement pst = conn.prepareStatement(sql);pst.setInt(1, 1);//InputStreamReader转换流可以设置编码File file = new File("D:\\goodbye.mp3");//设置BLOB类型,setBinaryStream//字节流InputStream in = new FileInputStream(file);pst.setBinaryStream(2, in, (int)file.length());//执行sql,接受返回结果int count = pst.executeUpdate();//处理结果System.out.println("受影响行数:"+ count);//释放资源in.close();pst.close();conn.close();}
}

JDBCBlobTest.java运行时出现的错误:
在这里插入图片描述
** 1. 这里显示我存的数据超过了数据库存取的最大容量:这里需要修改MySQL数据库的最大容量
解决方法:**

  • SET GLOBAL max_allowed_packet=8*1024*1024;
    将数据库存取的最大容量改为8M
  • show VARIABLES like '%max_allowed_packet%';
    查看数据库存取的最大容量

在这里插入图片描述

问题解决!!

2. 使用BLOB类型进行数据存储,BLOB存储空间不够
在这里插入图片描述

解决完第一个问题后,又出现新的错误,虽然英文不好,但是"Data too long"还是知道的,类型明明是BLOB类型了,怎么存储空间还不够4M吗?然后把错误去百度一搜,发现解决办法都是关于编码的问题,但是音乐文件以二进制形式存取和编码没有关系。于是就想,BLOB不够4M,还有没有其他的比BLOB更大的数据类型,就去Navicat找更高大上的类型,结果,真的有

在这里插入图片描述

后来,查了一下BLOB的最大存储大小:
TinyBlob:255B
Blob:65K
MediumBlob:16M
LongBlob:4G

最后,程序成功运行了

控制台:
在这里插入图片描述

数据库:
在这里插入图片描述

将音乐文件从数据库中取出:

/*** */
package cn.tx.jsp;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;/*** @author 11441**/
public class JDBCBlobReader {//取出音乐的内容public static void main(String[] args) throws Exception {//1.注册驱动Class.forName("com.mysql.jdbc.Driver");//反射//3.获取数据库连接对象Connectionjava.sql.Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsp_jdbc","root", "root");//4.定义sqlString sql = "select music from mymusic where id = ? ";//5.获取执行sql语句的对象StatementPreparedStatement pst = conn.prepareStatement(sql);pst.setInt(1, 1);ResultSet rs = pst.executeQuery();//读取if(rs.next()) {InputStream in = rs.getBinaryStream("music");//通过io流输出//读到哪里OutputStream out = new FileOutputStream("src/music.mp3");byte[] chs = new byte[100];int len = -1;while( (len = in.read(chs)) != -1 ) {//输出,从0开始输出,长度为数组的字长out.write(chs , 0 ,chs.length);}//流操作要closeout.close();in.close();}//8.释放资源rs.close();pst.close();conn.close();}
}

运行后,进行刷新,完成音乐文件的读取
在这里插入图片描述

在这里插入图片描述

播放成功

在这里插入图片描述

如果觉得这篇博客对你有些用处,希望支持一下啦!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Trie可持久化Trie

WARNING:以下代码未经测试,若发现错误,欢迎指出qwq~ Trie树(字典树) 一种简单的数据结构,可存储大量字符串,可在$O(len)$的时间内完成插入,删除,查找等操作。 下面是一个…

视觉的目的是什么?从监督学习到对比学习,回顾CV发展史

来源:AI科技评论作者: 周纵苇知乎摘要:视觉,对于人类或动物来说,似乎是一件稀松平常的事情,我们甚至都不需要去有意识地训练自己,就可以天赋一般地认识世界。对于机器而言,理解图片却…

【剑指offer】面试题22:链表中倒数第 K 个节点

题目: 输入一个链表,输出该链表中倒数第k哥结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1,2,3&#xff0…

day7——集合,深浅copy

数据类型的补充 # s1 中国    # b1 s1.encode(utf-8)    # # print(b1)-------------->b\xe4\xb8\xad\xe5\x9b\xbd utf-8 bytes --->gbk bytes    # s2 b1.decode(utf-8)    # # print(s2)---------------中国    # b2 s2.encode(gbk)    #…

MVC原理及案例分析

MVC原理及案例分析 关于MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到…

人工智能的鱼与熊掌:精度与可解释性

来源:陈德旺科学网博客链接地址:http://blog.sciencenet.cn/blog-57940-1270913.html 人工智能自1956年诞生之日,就肩负用计算机程序模拟人类(或生物体)智能的初心与使命,从而理解智能的工作原理与运作机制…

MVC与三层架构的联系及三层架构实现学生注册功能

MVC与三层架构的联系及三层架构实现学生注册功能 三层架构的逻辑关系&#xff1a; MVC和三层架构的联系&#xff1a; 三层架构实现学生注册功能的逻辑&#xff1a; 学生注册页面&#xff1a; 输入学生信息&#xff1a; 完成学生注册: 代码实现&#xff1a; add.jsp <% …

【剑指offer】面试题23:链表中环的入口节点

一个链表中包含环&#xff0c;请找出该链表的环的入口结点 代码&#xff1a; package offer; class Node3 { int val; Node3 next null; Node3(int val) { this.val val; } } public class ti23 { public static Node3 FindInterNode(Node…

(4.14)向上取整、向下取整、四舍五入取整的实例

Sql Server 里的向上取整、向下取整、四舍五入取整的实例&#xff01; 2012年12月31日 07:33:43 阅读数&#xff1a;102170 【四舍五入取整截取】select round(54.56,0) 【向下取整截取】 SELECT FLOOR(54.56) 【向上取整截取】 SELECT CEILING(13.15)以下转自&#xff1a;…

MVC5+EF6 入门完整教程11--细说MVC中仓储模式的应用

MVC5EF6 入门完整教程11--细说MVC中仓储模式的应用 原文:MVC5EF6 入门完整教程11--细说MVC中仓储模式的应用摘要&#xff1a; 第一阶段1~10篇已经覆盖了MVC开发必要的基本知识。 第二阶段11&#xff5e;20篇将会侧重于专题的讲解&#xff0c;一篇文章解决一个实际问题。 根据…

Java Web实现信息管理

Java Web实现信息管理 前言&#xff1a; 大二上学期刚学完Oracle&#xff0c;老师就要求用Java语言操作Oracle&#xff0c;当时真的是懵了。回顾自己前两年的生活&#xff0c;大一上学期学习C语言&#xff0c;下学期学习Java&#xff0c;当时教课老师是学硬件的。课上讲一些理…

【剑指offer】面试题25:合并两个排序的链表(Java 实现)

题目&#xff1a;输入两个递增排序的链表&#xff0c;合并这两个链表并使新链表中的结点仍然是按照递增排序的。 代码&#xff1a; package offer; class Node5 { int val; Node5 next null; Node5(int val) { this.val val; } } public class…

计算机科学界至今未解决的四大难题

作者&#xff1a;Shalitha Suranga译者&#xff1a;弯月 责编&#xff1a;张文出品&#xff1a;CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;在现实生活中&#xff0c;很多难题的解决方案都用到了计算机科学的基础理论。例如&#xff0c; Git 分布式版本控制系统建立…

PHP正则匹配到2个字符串之间的内容,匹配HTML便签内容

PHP正则匹配到2个字符串之间的内容 $preg /xue[\s\S]*?om/i; preg_match_all($preg,"学并思网址xuebingsi.com",$res); var_dump($res[0][0]); 匹配HTML便签内容 假如需要匹配下面HTML字符串里面的第三个<img> 把它替换掉,或者删除掉这样个需求 $string <p…

【剑指offer】面试题24:反转链表(Java 实现)

输入一个链表&#xff0c;反转链表后&#xff0c;输出新链表的表头。 代码&#xff1a; package offer; class Node4 { int val; Node4 next null; Node4(int val) { this.val val; } } public class ti24 { public static Node4 ReverseL…

按字编址与按字节编址

按字编址与按字节编址 要清楚按字编址和按字节编址的区别&#xff0c;先要知道 比特(bit)&#xff0c;字节(byte)&#xff0c;字(word) 之间的关系。 在计算机系统中&#xff0c;总线以固定大小的一块数据进行传输&#xff0c;这一块的数据也称为字(word)&#xff0c;如今的计…

2021年AI关键趋势,AI芯片初创公司可能发生并购

来源&#xff1a;雷锋网作者&#xff1a;包永刚编译&#xff1a;雷锋网人工智能&#xff08;AI&#xff09;和机器学习仍然是技术决策者、行业人士和投资者关注的重点。标普全球市场财智&#xff08;S&P Intelligence&#xff09;2020 7月发布的调查显示&#xff0c;有58%的…

English trip -- VC(情景课)5 Around Town

Around Town 城市周围 Talk about the picture 看图说话 sentences Where are you&#xff1f; Im in the Meten classroom. What do you do? I study English at the school. I eat dinner at the restaurant I go shopping at the supermarket Do you study English at th…

CPU组成结构

CPU组成结构 CPU总体构图 CPU中央处理器&#xff08;Central Processing Unit&#xff09; CPU的结构框图&#xff1a;CPU内部由ALU&#xff08;算术逻辑单元&#xff09;、CU&#xff08;控制器&#xff09;、寄存器&#xff08;PC、IR、PSW、DR、通用寄存器等&#xff09;、…

【剑指offer】面试题26: 树的子结构(Java)

输入两棵二叉树A&#xff0c;B&#xff0c;判断B是不是A的子结构。&#xff08;ps&#xff1a;我们约定空树不是任意一个树的子结构&#xff09; 代码&#xff1a; package offer; class TreeNode { int val; TreeNode left null; TreeNode right null; Tr…