把上传的文件保存到数据库中。数据库的类型为blob和longblob。上传文件的大小大于1M是需要修改MySQL的my.ini配置文件。

修改内容如下:

  1. [mysqld]
  2. max_allowed_packet=1024M

实验步骤:

一、创建数据库表。

脚本:

  1. DROP TABLE IF EXISTS `upload`;
  2. CREATE TABLE `upload` (
  3. `dir` varchar(100) NOT NULL DEFAULT '', /* 保存上传的时间 */
  4. `upload` longblob, /* 存储文件 */
  5. PRIMARY KEY (`dir`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

二、建立Java项目

三、添加MySQL数据库驱动包

四、添加iBatis包

五、添加iBatis主配置文件

代码:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE sqlMapConfig
  3. PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
  4. "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
  5. <sqlMapConfig>
  6. <transactionManager type="JDBC" commitRequired="false">
  7. <dataSource type="SIMPLE">
  8. <property name="JDBC.Driver"   value="com.mysql.jdbc.Driver"/>
  9. <property name="JDBC.ConnectionURL" value="jdbc:mysql://10.32.52.19:3306/iBatis"/>
  10. <property name="JDBC.Username" value="root"/>
  11. <property name="JDBC.Password" value="root"/>
  12. </dataSource>
  13. </transactionManager>
  14. <sqlMap resource="oks-sql.xml"/>
  15. </sqlMapConfig>

六、添加映射文件

代码:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE sqlMap
  3. PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
  4. "http://ibatis.apache.org/dtd/sql-map-2.dtd">
  5. <sqlMap namespace="sql" >
  6. <typeAlias
  7. alias="upload"
  8. type="Upload" />
  9. <insert
  10. id="up"
  11. parameterClass="upload" >
  12. INSERT INTO upload(dir,upload) values(#dir#,#uploadIn#)
  13. </insert>
  14. <select
  15. id="down"
  16. resultClass="upload" >
  17. select dir,upload as uploadIn from upload
  18. </select>
  19. </sqlMap>

七、编写数据表实体类。

注意:数据库中的Blob类型和longblob类型在实体类中使用byte[]

代码:

  1. import java.io.FileOutputStream;
  2. /**
  3. * TODO Put here a description of what this class does.
  4. *
  5. * @author Administrator.
  6. * Created Sep 12, 2012.
  7. */
  8. public class Upload {
  9. private String dir;
  10. private byte[] uploadIn;
  11. private FileOutputStream uploadOut;
  12. /**
  13. * TODO Put here a description of what this constructor does.
  14. *
  15. */
  16. public Upload() {
  17. super();
  18. // TODO Auto-generated constructor stub.
  19. }
  20. public String getDir() {
  21. return this.dir;
  22. }
  23. public void setDir(String dir) {
  24. this.dir = dir;
  25. }
  26. public byte[] getUploadIn() {
  27. return this.uploadIn;
  28. }
  29. public void setUploadIn(byte[] uploadIn) {
  30. this.uploadIn = uploadIn;
  31. }
  32. public FileOutputStream getUploadOut() {
  33. return this.uploadOut;
  34. }
  35. public void setUploadOut(FileOutputStream uploadOut) {
  36. this.uploadOut = uploadOut;
  37. }
  38. }

八、编写连接代码

代码:

  1. private static SqlMapClient sqlMapClient;
  2. static {
  3. Reader reader = null;
  4. try {
  5. reader = Resources.getResourceAsReader("sqlMapConfig.xml");
  6. } catch (IOException exception) {
  7. exception.printStackTrace();
  8. }
  9. // 得到SqlMapClient
  10. sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
  11. }

九、编写上传文件的代码

代码:

  1. public static void upload() {
  2. try {
  3. sqlMapClient.startTransaction();
  4. Upload upload = new Upload();
  5. upload.setDir(System.currentTimeMillis() + "");
  6. try {
  7. ByteArrayOutputStream bytestream = new ByteArrayOutputStream(); //转换byte数组
  8. FileInputStream in = new FileInputStream("d:/jcifs-1.3.14.jar"); //文件
  9. int ch;
  10. //转换成byte数组
  11. while ((ch = in.read()) != -1) {
  12. bytestream.write(ch);
  13. }
  14. byte imgdata[] = bytestream.toByteArray();
  15. upload.setUploadIn(imgdata);
  16. } catch (IOException exception) {
  17. exception.printStackTrace();
  18. }
  19. sqlMapClient.insert("up", upload);
  20. sqlMapClient.commitTransaction();
  21. } catch (SQLException exception) {
  22. // TODO Auto-generated catch-block stub.
  23. exception.printStackTrace();
  24. }
  25. }

十、编写下载的文件

代码:

  1. public static void down() {
  2. try {
  3. byte[] Buffer = new byte[4096];
  4. int size = 0;
  5. sqlMapClient.startTransaction();
  6. Upload upload = (Upload) sqlMapClient.queryForObject("down");
  7. try {
  8. FileOutputStream fileOutputStream = new FileOutputStream(
  9. "d:/b.jar"); //保存文件
  10. InputStream inputStream = new ByteArrayInputStream(
  11. upload.getUploadIn()); //byte转换为流
  12. while ((size = inputStream.read(Buffer)) != -1) {
  13. System.out.println(size);
  14. fileOutputStream.write(Buffer, 0, size);
  15. }
  16. } catch (FileNotFoundException exception) {
  17. // TODO Auto-generated catch-block stub.
  18. exception.printStackTrace();
  19. } catch (IOException exception) {
  20. // TODO Auto-generated catch-block stub.
  21. exception.printStackTrace();
  22. }
  23. sqlMapClient.commitTransaction();
  24. } catch (SQLException exception) {
  25. // TODO Auto-generated catch-block stub.
  26. exception.printStackTrace();
  27. }
  28. }

转载于:https://blog.51cto.com/wangjianming555/1063228

MySQL – iBatis – 文件存储相关推荐

  1. 修改mysql文件位置_如何修改mysql数据文件存储位置

    如果想更换mysql的数据文件的存储位置,则: Centos下: 查看MYSQL数据文件存储路径 mysql>show variables like '%datadir%'; # /usr/lo ...

  2. 详述查看 MySQL 数据文件存储位置的方法

    我们可能会有一个疑惑,那就是:当我们在本地(自己的电脑)安装完 MySQL 之后,也创建了很多的数据库啊.表啊,也存储了很多的数据啊,但是这些内容都存储到哪里了呢?特别是,当我们需要直接操作这些数据文 ...

  3. mysql innodb文件存储_MySQL数据库和InnoDB存储引擎文件

    参数文件 当MySQL示例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.在默认情况下,MySQL实例会按照一定 ...

  4. mysql二进制大文件_Mysql实例Mysql LONGTEXT 类型存储大文件(二进制也可以) (修改+调试+整理)...

    <Mysql实例Mysql LONGTEXT 类型存储大文件(二进制也可以) (修改+调试+整理)>要点: 本文介绍了Mysql实例Mysql LONGTEXT 类型存储大文件(二进制也可 ...

  5. (解析+源码)基于JAVA Swing+MySQL实现学生信息管理系统(增、删、改、查)数据库/文件存储

    根据学校对学生信息日常管理需要,学生信息管理系统包括以下功能: 登录系统: 新建学生信息:添加学生信息: 删除学生信息:对指定学生信息进行删除: 修改学生信息:对指定学生信息进行修改 查找学生信息:输 ...

  6. mysql存储文件用什么类型_块存储、文件存储、对象存储的区别是什么?

    块存储: 需要实现Linux的Block Device的接口或者QEMU提供的Block Driver接口.提供随机读写,可以像使用物理硬盘一样格式化并建立文件系统来使用块存储,块存储可用于绝大部分通 ...

  7. mysql数据库日志存储位置_MySQL数据库之mysql日志文件在哪 如何修改MySQL日志文件位置...

    本文主要向大家介绍了MySQL数据库之mysql日志文件在哪 如何修改MySQL日志文件位置 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. MySQL日志文件相信大家都有很多的 ...

  8. mysql有那些存储引擎_MySQL有那哪些存储引擎

    实际我们在平时的开发中,经常会遇到的,在用SQLyog等工具创建表时,就有一个引擎项要你去选.如下图: Mysql的存储引擎有这么多种,实际我们在平时用的最多的莫过于InnoDB和MyISAM了. 所 ...

  9. mysql longtext可以存储多少文字_MySQL 四万字精华总结 + 面试100 问,和面试官扯皮绰绰有余(收藏系列)

    作者:派大新 链接:https://juejin.im/post/5f0d4fadf265da22f3250eaa 写在之前:不建议那种上来就是各种面试题罗列,然后背书式的去记忆,对技术的提升帮助很小 ...

  10. 数据库基础笔记(MySQL)7 —— 存储引擎和视图 ( 完结撒花 )

    存储引擎 实在是学浅才疏,只能大致写点,放篇大佬的,看详细的去吧 传送门 ,等我闲下来学会了再来补充 即一个表存储数据的方式,不同的存储引擎会提供不同的功能,性能等 可以用 engine 指定存储引擎 ...

最新文章

  1. opencv算法+人脸检测
  2. Forrester 首席分析师对话阿里云容器服务负责人:容器的未来趋势是什么?
  3. SpringCloud干货(2)---------大时代下的分布式微服务
  4. 数据结构与算法(二):堆,大根堆,小根堆,堆排序,比较器详解
  5. [转载]Geronimo renegade: OpenEJB 和 Apache Geronimo 的 EJB 实现
  6. 被人民日报等官媒反复强调的​「企业家精神」,到底是什么?
  7. Microsoft System Center (SCCM/SCOM)简介
  8. Android开发最佳学习路线图
  9. 租户管理门户登录报错,提示身份验证失败
  10. 什么是 Linux ?什么是操作系统
  11. 在后台处理请求返回的json字符串
  12. 数据分析入门学习指南,零基础小白都能轻松看懂
  13. python3.x和python2.x唯一区别_Python3.x和Python2.x的区别
  14. ABP框架 - 我的第一个Web API
  15. 近期准备秋招的一些体会
  16. 单元测试系列之九:Sonar 常用代码规则整理(一)
  17. DALLE·2(Hierarchical Text-Conditional Image Generation with CLIP Latents)
  18. unity3d实现第一人称射击游戏之CS反恐精英(四)(子弹模块,音效特效)
  19. springboot vue uniapp校园报修系统源码
  20. Linux搭建squid varnish 代理服务器

热门文章

  1. mysql 标记_mysql-徽章/标记内容自用户上次看到以来已...
  2. WINDOWS自带的压缩,解压工具命令
  3. LINUX SHELL中while循环和遍历参数
  4. JDK默认是little-endian
  5. 编译OpenJDK8:configure: could not find or use freetype at location
  6. NWT纪事:说是闷声发大财,不干活就发财了?
  7. Composite(组合)
  8. GDI+ 保存HDC为位图文件
  9. 软件测试 vb,使用VB6.0进行自动化测试
  10. python的raw_对于Python中RawString的理解(引用)