當前位置:首頁 » 操作系統 » 寫文件寫資料庫

寫文件寫資料庫

發布時間: 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();
}
}
}
本文由作者:陳希章

熱點內容
伺服器換位置了ip地址怎麼換 發布:2024-09-19 09:33:50 瀏覽:798
javarest 發布:2024-09-19 09:28:43 瀏覽:753
密碼子的原料是什麼 發布:2024-09-19 09:11:42 瀏覽:348
半夜編程 發布:2024-09-19 09:11:36 瀏覽:104
海康威視存儲卡質量如何 發布:2024-09-19 08:55:35 瀏覽:941
python3默認安裝路徑 發布:2024-09-19 08:50:22 瀏覽:517
環衛視頻拍攝腳本 發布:2024-09-19 08:35:44 瀏覽:419
sqlserveronlinux 發布:2024-09-19 08:16:54 瀏覽:257
編程常數 發布:2024-09-19 08:06:36 瀏覽:953
甘肅高性能邊緣計算伺服器雲空間 發布:2024-09-19 08:06:26 瀏覽:163