当前位置:首页 » 操作系统 » 写文件写数据库

写文件写数据库

发布时间: 2022-07-16 03:55:25

① springboot上传文件写入数据库

首先导入了相应的jar包
<!--thymeleaf--><dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId></dependency><dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-java8time</artifactId></dependency><!--数据库连接--><dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId></dependency><!--mybatis整合springboot--><dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version></dependency><!--druid数据源--><dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.22</version></dependency>

对数据源,mybatis,和上传文件进行配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource username: root password: shw123zxc url: jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC driver-class-name: com.mysql.cj.jdbc.Driver servlet:
multipart:
max-request-size: 10MB #上传文件的最大总大小
max-file-size: 10MB #上传单个文件的最大大小mybatis:
type-aliases-package: cn.codewei.pojo mapper-locations: classpath:/mapper/*.xml1234567891011121314

然后写一个文件上传的html,注意表单的==enctype属性要设置为multipart/form-data==
<!DOCTYPE html><html lang="en"><head>
<meta charset="UTF-8">
<title>Title</title></head><body>
<h1>文件上传</h1>
<form method="post" enctype="multipart/form-data" action="/upload">
<input type="file" name="file">
<input type="submit" value="上传">
</form></body></html>1234567891011121314

然后写一个Mapper和对应的Mapper.xml和service
@Mapper@Repositorypublic interface PhotoMapper {
// 向数据库中添加图片
public int addPhoto(Photo photo);

// 从数据库中取出图片
public Photo getPhotoById(@Param("id") int id);}123456789
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="cn.codewei.mapper.PhotoMapper">
<insert id="addPhoto" parameterType="photo">
insert into image values (#{id},#{photo},#{photo_name},#{photo_type}) </insert>
<select id="getPhotoById" resultType="photo">
select * from image where id=#{id} </select></mapper>123456789101112

在Controller中进行调用
上传
@Autowiredprivate PhotoService photoService;@Autowiredprivate Photo photo;@PostMapping("/upload")@ResponseBodypublic String upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws IOException {
byte[] bytes = file.getBytes();
photo.setPhoto(bytes);
photo.setPhoto_name(file.getOriginalFilename());
photo.setPhoto_type(".jpg");

photoService.addPhoto(photo);

return "上传成功!";}123456789101112131415161718

取出,在页面中显示
@RequestMapping("/getPhoto")public String getImage(HttpServletResponse response) throws IOException {
Photo photo = photoService.getPhotoById(1);
byte[] photo1 = photo.getPhoto();
ServletOutputStream os = response.getOutputStream();
os.write(photo1);
os.close();
return "";}123456789
<!DOCTYPE html><html lang="en"><head>
<meta charset="UTF-8">
<title>Title</title></head><body>
<h1>首页</h1>
<img src="/getPhoto" width="200px" height="200px"></body></html>

② 如何把一个word文档中的内容写入到数据库中

首先,建立一个Access2000数据库data.mdb,在库中建立一个表userdata,里面有“工号”、“姓名”、“性别”、“部门”四个字段,都是字符型的,再输入一些数据,再建立一个窗体Form1,在Form1中,放置以下控件:
控件名称 属性 值 说明
Tlabel1 Caption "请输入文件名"
TEdit1 Name "" 用来输入文件名,带扩展名的
TButton1 Caption "保存"
TButton2 Caption "退出"
ADOTable1 Active

ConnectionString

TableName True
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.mdb;Persist Security Info=False
userdata

下面是相关代码:
file://---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Variant OLEObject;
AnsiString dataword;
if(Trim(Edit1->Text)=="")
{
ShowMessage("请输入文件名");
return;
}
String currentPath=GetCurrentDir()+"//"+Trim(Edit1->Text);
OLEObject=CreateOleObject("Word.Basic");
OLEObject.Exec(Procere("FileNew"));
OLEObject.Exec(Procere("EndOfDocument"));
ADOTable1->First();
while(ADOTable1->Eof!=True)
{
dataword=ADOTable1->FieldValues["工号"]+ADOTable1->FieldValues["姓名"]+ADOTable1->FieldValues["性别"]+ADOTable1->FieldValues["部门"];
OLEObject.Exec(Procere("Insert")<<dataword);
ADOTable1->Next();
}
OLEObject.Exec(Procere("StartOfDocument"));
OLEObject.Exec(Procere("FileSaveAs")<<currentPath);
OLEObject.Exec(Procere("FileClose")<<1);
ShowMessage("文件已经写入!谢谢使用!");
}
---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
this->Close();
}
---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Click(TObject *Sender)
{
Edit1->Text="";
}

③ 可以写一个文本文档作为数据库吗怎么写这样的数据库

文本无法作为数据库.如果只是想作为数据的载体,还是可以的.

④ 写内存,写文件,写数据库,如何权衡!

速度比较:写内存>写文件>写数据库 写内存快是快,但是内存中的数据是无法持久化的。 写文件比起写数据库速度快了很多,但是查询统计文件中的数据就非常困难了。 写数据库就是慢,特别是高并发的时候会锁表。 流量分析系统会在每个要被统计的网站上放上一段js,每次网站的某一个页面被访问时这段js都会提交一次流量分析系统用与统计PV。所以流量分析系统的并发量是非常大的。 并发量如此之大,所以每次提交的数据不能直接写文件,更不能写数据库,所以只能写内存。在java中可以写入一个Static的Vector中,并用一个线程读取Vector中的数据,并每隔一分钟或半分钟写一次文件,文件名为“年月日时“,所以是每小时会生成一个新的文件。

⑤ 在数据库中为什么先写日志文件后写数据库举例说明

哈,先写日志文件为保证数据库的可恢复性,日志文件能够用来进行事务故障恢复、系统故障恢复,并能够协助后备副本进行介质故障恢复。当数据库文件毁坏后,可重新装入后援副本把数据库恢复到转储结束时刻的正确状态,再利用建立的日志文件,可以把已完成的事务进行重做处理,而对于故障发生时尚未完成的事务则进行撤消处理,这样不用运行应用程序就可把数据库恢复到故障前某一时刻的正确状态。

php 读写文件和数据库哪个快

1、直接读文件相比数据库查询效率更胜一筹,而且文中还没算上连接和断开的时间。

2、一次读取的内容越大,直接读文件的优势会越明显(读文件时间都是小幅增长,这跟文件存储的连续性和簇大小等有关系),这个结果恰恰跟天缘预料的相反,说明MYSQL对更大文件读取可能又附加了某些操作(两次时间增长了近30%),如果只是单纯的赋值转换应该是差异偏小才对。

3、写文件和INSERT几乎不用测试就可以推测出,数据库效率只会更差。

4、很小的配置文件如果不需要使用到数据库特性,更加适合放到独立文件里存取,无需单独创建数据表或记录,很大的文件比如图片、音乐等采用文件存储更为方便,只把路径或缩略图等索引信息放到数据库里更合理一些。

5、PHP上如果只是读文件,file_get_contents比fopen、fclose更有效率,不包括判断存在这个函数时间会少3秒左右。

6、fetch_row和fetch_object应该是从fetch_array转换而来的,我没看过PHP的源码,单从执行上就可以说明fetch_array效率更高,这跟网上的说法似乎相反。

⑦ 如何将大文件写入到数据库中

最近利用空闲时间自己在写一个文件备份工具,因为我磁盘上的很多文件很重要,例如很多PPT和讲义。所以需要经常备份,而且因为这些文件很多,所以需要增量备份。
我尝试用过windows自带的ntbackup工具,但感觉不是很爽。它不支持压缩备份,而且界面也有点复杂。
为了响应伟大领袖的“自力更生,丰衣足食”的号召,咱决定自己写一个工具,专门备份到数据库。支持压缩,支持加密,支持增量。
本文分享一下其中一些重点的技术细节
其中一个关键的技术就是将文件使用二进制的方式存放在数据库的varbinary(max)的字段中。该字段最大允许的长度为2GB。
对于一些小文件,我们可以一次性读取它的所有字节,然后一次提交到数据库
///
<summary>
///
这个方法演示了如何一次提交所有的字节。这样导致的结果是:应用程序立即需要申请等同于文件大小的内存
///
</summary>
static
void
SubmitFileByOnce()
{
string
file
=
@"F:功夫熊猫.rmvb";//文件大小为519MB
byte[]
buffer
=
File.ReadAllBytes(file);
using
(SqlConnection
conn
=
new
SqlConnection("server=(local);database=demo;integrated
security=true"))
{
using
(SqlCommand
cmd
=
conn.CreateCommand())
{
cmd.CommandText
=
"INSERT
INTO
Files(FileName,FileContents)
VALUES(@fileName,@fileContents)";
cmd.Parameters.AddRange(
new[]
{
new
SqlParameter("@fileName",file),
new
SqlParameter("@fileContents",buffer)
});
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
}
但是,上面的方法有几个问题,主要体现在如果文件比较大的话
1.
它需要一次性很大的内存,具体数据等同于文件大小。因为File.ReadAllBytes方法是将所有字节全部读入到内存。
2.
它会导致提交失败,就是因为数据太大了。数据库也会拒绝。
那么,我就对这个方法做了一下改进,将文件拆分为5MB一段,也就是说,此时每次申请的内存只有5MB。这就大大地提高了可用性。
///
<summary>
///
这个方法是将文件切分为5MB的块,每次只是提交5MB,所以可能多次提交,但内存占用就比较小
///
</summary>
static
void
SubmitFileStepByStep()
{
string
file
=
@"F:功夫熊猫.rmvb";//以这个文件为例,大小为519MB,一共需要的时间大约94秒。还是有点慢的,所以还可能需要进行压缩
FileStream
fs
=
new
FileStream(file,
FileMode.Open);
byte[]
buffer
=
new
byte[5
*
1024
*
1024];
int
readCount;
using
(SqlConnection
conn
=
new
SqlConnection("server=(local);database=demo;integrated
security=true"))
{
conn.Open();
while
((readCount
=
fs.Read(buffer,
0,
buffer.Length))
>
0)
{
using
(SqlCommand
cmd
=
conn.CreateCommand())
{
cmd.CommandText
=
"INSERT
INTO
Files(FileName,FileContents)
VALUES(@fileName,@fileContents)";
cmd.Parameters.AddRange(
new[]
{
new
SqlParameter("@fileName",file),
new
SqlParameter("@fileContents",buffer)
});
cmd.ExecuteNonQuery();
}
}
conn.Close();
}
}
这样的话,有一个后果就是一个文件,可能在数据库中会有多条记录。所以在读取的时候,我们需要对其进行合并
static
void
DownloadFile()
{
string
file
=
@"F:功夫熊猫.rmvb";
string
destfile
=
@"E:TempTemp.wmv";
using
(SqlConnection
conn
=
new
SqlConnection("server=(local);database=demo;integrated
security=true"))
{
using
(SqlCommand
cmd
=
conn.CreateCommand())
{
cmd.CommandText
=
"SELECT
FileContents
FROM
Files
WHERE
FileName=@fileName";
cmd.Parameters.AddRange(
new[]
{
new
SqlParameter("@fileName",file),
});
conn.Open();
SqlDataReader
reader
=
cmd.ExecuteReader();
FileStream
fs
=
new
FileStream(destfile,
FileMode.Append,
FileAccess.Write);
while
(reader.Read())
{
byte[]
buffer
=
(byte[])reader[0];
fs.Write(buffer,
0,
buffer.Length);
}
fs.Close();
reader.Close();
conn.Close();
}
}
}
本文由作者:陈希章

热点内容
上传文件文件夹找不到 发布:2024-09-20 00:26:32 浏览:914
承台箍筋加密区 发布:2024-09-20 00:26:31 浏览:227
笔记本什么配置能流畅运行cf 发布:2024-09-20 00:14:19 浏览:951
实测华为编译器 发布:2024-09-19 23:50:52 浏览:821
linux汇总 发布:2024-09-19 23:46:39 浏览:452
阿里云服务器环境搭建教程 发布:2024-09-19 23:21:58 浏览:837
黄色文件夹图标 发布:2024-09-19 23:19:22 浏览:684
mysql数据库导出导入 发布:2024-09-19 23:00:47 浏览:183
lua脚本精灵 发布:2024-09-19 23:00:41 浏览:659
任务栏文件夹图标 发布:2024-09-19 22:54:25 浏览:101