MySQL – iBatis – 文件存储
把上传的文件保存到数据库中。数据库的类型为blob和longblob。上传文件的大小大于1M是需要修改MySQL的my.ini配置文件。
修改内容如下:
- [mysqld]
- max_allowed_packet=1024M
实验步骤:
一、创建数据库表。
脚本:
- DROP TABLE IF EXISTS `upload`;
- CREATE TABLE `upload` (
- `dir` varchar(100) NOT NULL DEFAULT '', /* 保存上传的时间 */
- `upload` longblob, /* 存储文件 */
- PRIMARY KEY (`dir`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
二、建立Java项目
三、添加MySQL数据库驱动包
四、添加iBatis包
五、添加iBatis主配置文件
代码:
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE sqlMapConfig
- PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
- "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
- <sqlMapConfig>
- <transactionManager type="JDBC" commitRequired="false">
- <dataSource type="SIMPLE">
- <property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>
- <property name="JDBC.ConnectionURL" value="jdbc:mysql://10.32.52.19:3306/iBatis"/>
- <property name="JDBC.Username" value="root"/>
- <property name="JDBC.Password" value="root"/>
- </dataSource>
- </transactionManager>
- <sqlMap resource="oks-sql.xml"/>
- </sqlMapConfig>
六、添加映射文件
代码:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE sqlMap
- PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
- "http://ibatis.apache.org/dtd/sql-map-2.dtd">
- <sqlMap namespace="sql" >
- <typeAlias
- alias="upload"
- type="Upload" />
- <insert
- id="up"
- parameterClass="upload" >
- INSERT INTO upload(dir,upload) values(#dir#,#uploadIn#)
- </insert>
- <select
- id="down"
- resultClass="upload" >
- select dir,upload as uploadIn from upload
- </select>
- </sqlMap>
七、编写数据表实体类。
注意:数据库中的Blob类型和longblob类型在实体类中使用byte[]
代码:
- import java.io.FileOutputStream;
- /**
- * TODO Put here a description of what this class does.
- *
- * @author Administrator.
- * Created Sep 12, 2012.
- */
- public class Upload {
- private String dir;
- private byte[] uploadIn;
- private FileOutputStream uploadOut;
- /**
- * TODO Put here a description of what this constructor does.
- *
- */
- public Upload() {
- super();
- // TODO Auto-generated constructor stub.
- }
- public String getDir() {
- return this.dir;
- }
- public void setDir(String dir) {
- this.dir = dir;
- }
- public byte[] getUploadIn() {
- return this.uploadIn;
- }
- public void setUploadIn(byte[] uploadIn) {
- this.uploadIn = uploadIn;
- }
- public FileOutputStream getUploadOut() {
- return this.uploadOut;
- }
- public void setUploadOut(FileOutputStream uploadOut) {
- this.uploadOut = uploadOut;
- }
- }
八、编写连接代码
代码:
- private static SqlMapClient sqlMapClient;
- static {
- Reader reader = null;
- try {
- reader = Resources.getResourceAsReader("sqlMapConfig.xml");
- } catch (IOException exception) {
- exception.printStackTrace();
- }
- // 得到SqlMapClient
- sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
- }
九、编写上传文件的代码
代码:
- public static void upload() {
- try {
- sqlMapClient.startTransaction();
- Upload upload = new Upload();
- upload.setDir(System.currentTimeMillis() + "");
- try {
- ByteArrayOutputStream bytestream = new ByteArrayOutputStream(); //转换byte数组
- FileInputStream in = new FileInputStream("d:/jcifs-1.3.14.jar"); //文件
- int ch;
- //转换成byte数组
- while ((ch = in.read()) != -1) {
- bytestream.write(ch);
- }
- byte imgdata[] = bytestream.toByteArray();
- upload.setUploadIn(imgdata);
- } catch (IOException exception) {
- exception.printStackTrace();
- }
- sqlMapClient.insert("up", upload);
- sqlMapClient.commitTransaction();
- } catch (SQLException exception) {
- // TODO Auto-generated catch-block stub.
- exception.printStackTrace();
- }
- }
十、编写下载的文件
代码:
- public static void down() {
- try {
- byte[] Buffer = new byte[4096];
- int size = 0;
- sqlMapClient.startTransaction();
- Upload upload = (Upload) sqlMapClient.queryForObject("down");
- try {
- FileOutputStream fileOutputStream = new FileOutputStream(
- "d:/b.jar"); //保存文件
- InputStream inputStream = new ByteArrayInputStream(
- upload.getUploadIn()); //byte转换为流
- while ((size = inputStream.read(Buffer)) != -1) {
- System.out.println(size);
- fileOutputStream.write(Buffer, 0, size);
- }
- } catch (FileNotFoundException exception) {
- // TODO Auto-generated catch-block stub.
- exception.printStackTrace();
- } catch (IOException exception) {
- // TODO Auto-generated catch-block stub.
- exception.printStackTrace();
- }
- sqlMapClient.commitTransaction();
- } catch (SQLException exception) {
- // TODO Auto-generated catch-block stub.
- exception.printStackTrace();
- }
- }
转载于:https://blog.51cto.com/wangjianming555/1063228
MySQL – iBatis – 文件存储相关推荐
- 修改mysql文件位置_如何修改mysql数据文件存储位置
如果想更换mysql的数据文件的存储位置,则: Centos下: 查看MYSQL数据文件存储路径 mysql>show variables like '%datadir%'; # /usr/lo ...
- 详述查看 MySQL 数据文件存储位置的方法
我们可能会有一个疑惑,那就是:当我们在本地(自己的电脑)安装完 MySQL 之后,也创建了很多的数据库啊.表啊,也存储了很多的数据啊,但是这些内容都存储到哪里了呢?特别是,当我们需要直接操作这些数据文 ...
- mysql innodb文件存储_MySQL数据库和InnoDB存储引擎文件
参数文件 当MySQL示例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.在默认情况下,MySQL实例会按照一定 ...
- mysql二进制大文件_Mysql实例Mysql LONGTEXT 类型存储大文件(二进制也可以) (修改+调试+整理)...
<Mysql实例Mysql LONGTEXT 类型存储大文件(二进制也可以) (修改+调试+整理)>要点: 本文介绍了Mysql实例Mysql LONGTEXT 类型存储大文件(二进制也可 ...
- (解析+源码)基于JAVA Swing+MySQL实现学生信息管理系统(增、删、改、查)数据库/文件存储
根据学校对学生信息日常管理需要,学生信息管理系统包括以下功能: 登录系统: 新建学生信息:添加学生信息: 删除学生信息:对指定学生信息进行删除: 修改学生信息:对指定学生信息进行修改 查找学生信息:输 ...
- mysql存储文件用什么类型_块存储、文件存储、对象存储的区别是什么?
块存储: 需要实现Linux的Block Device的接口或者QEMU提供的Block Driver接口.提供随机读写,可以像使用物理硬盘一样格式化并建立文件系统来使用块存储,块存储可用于绝大部分通 ...
- mysql数据库日志存储位置_MySQL数据库之mysql日志文件在哪 如何修改MySQL日志文件位置...
本文主要向大家介绍了MySQL数据库之mysql日志文件在哪 如何修改MySQL日志文件位置 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. MySQL日志文件相信大家都有很多的 ...
- mysql有那些存储引擎_MySQL有那哪些存储引擎
实际我们在平时的开发中,经常会遇到的,在用SQLyog等工具创建表时,就有一个引擎项要你去选.如下图: Mysql的存储引擎有这么多种,实际我们在平时用的最多的莫过于InnoDB和MyISAM了. 所 ...
- mysql longtext可以存储多少文字_MySQL 四万字精华总结 + 面试100 问,和面试官扯皮绰绰有余(收藏系列)
作者:派大新 链接:https://juejin.im/post/5f0d4fadf265da22f3250eaa 写在之前:不建议那种上来就是各种面试题罗列,然后背书式的去记忆,对技术的提升帮助很小 ...
- 数据库基础笔记(MySQL)7 —— 存储引擎和视图 ( 完结撒花 )
存储引擎 实在是学浅才疏,只能大致写点,放篇大佬的,看详细的去吧 传送门 ,等我闲下来学会了再来补充 即一个表存储数据的方式,不同的存储引擎会提供不同的功能,性能等 可以用 engine 指定存储引擎 ...
最新文章
- opencv算法+人脸检测
- Forrester 首席分析师对话阿里云容器服务负责人:容器的未来趋势是什么?
- SpringCloud干货(2)---------大时代下的分布式微服务
- 数据结构与算法(二):堆,大根堆,小根堆,堆排序,比较器详解
- [转载]Geronimo renegade: OpenEJB 和 Apache Geronimo 的 EJB 实现
- 被人民日报等官媒反复强调的​「企业家精神」,到底是什么?
- Microsoft System Center (SCCM/SCOM)简介
- Android开发最佳学习路线图
- 租户管理门户登录报错,提示身份验证失败
- 什么是 Linux ?什么是操作系统
- 在后台处理请求返回的json字符串
- 数据分析入门学习指南,零基础小白都能轻松看懂
- python3.x和python2.x唯一区别_Python3.x和Python2.x的区别
- ABP框架 - 我的第一个Web API
- 近期准备秋招的一些体会
- 单元测试系列之九:Sonar 常用代码规则整理(一)
- DALLE·2(Hierarchical Text-Conditional Image Generation with CLIP Latents)
- unity3d实现第一人称射击游戏之CS反恐精英(四)(子弹模块,音效特效)
- springboot vue uniapp校园报修系统源码
- Linux搭建squid varnish 代理服务器
热门文章
- mysql 标记_mysql-徽章/标记内容自用户上次看到以来已...
- WINDOWS自带的压缩,解压工具命令
- LINUX SHELL中while循环和遍历参数
- JDK默认是little-endian
- 编译OpenJDK8:configure: could not find or use freetype at location
- NWT纪事:说是闷声发大财,不干活就发财了?
- Composite(组合)
- GDI+ 保存HDC为位图文件
- 软件测试 vb,使用VB6.0进行自动化测试
- python的raw_对于Python中RawString的理解(引用)