有了源代码如何做网站,搜索大全引擎,重庆最火的网站,河南高端网站数据库存取BLOB类型音乐文件的过程及常见错误 数据库端的准备工作#xff1a;
新建表#xff0c;用来存放音乐文件#xff1a;mymusic 第一列#xff1a;id 类型#xff1a;int 第二列#xff1a;music 类型#xff1a;blob 将音乐文件存入数据库
/*** */
package cn…数据库存取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_packet8*1024*1024; 将数据库存取的最大容量改为8Mshow 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();}
}运行后进行刷新完成音乐文件的读取 播放成功 如果觉得这篇博客对你有些用处希望支持一下啦