日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
「教你文件夾傳至數(shù)據(jù)庫的方法」(文件夾怎么傳到數(shù)據(jù)庫)

教你文件夾傳至數(shù)據(jù)庫的方法

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供陸河網(wǎng)站建設(shè)、陸河做網(wǎng)站、陸河網(wǎng)站設(shè)計(jì)、陸河網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、陸河企業(yè)網(wǎng)站模板建站服務(wù),十年陸河做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

現(xiàn)今,數(shù)據(jù)已成為人們?nèi)粘I钪胁豢苫蛉钡囊徊糠?。無論是在工作中還是在日常娛樂中,我們都需要對(duì)數(shù)據(jù)進(jìn)行管理。因此,數(shù)據(jù)存儲(chǔ)設(shè)備的出現(xiàn),給我們生活帶來了極大的便利。傳統(tǒng)的數(shù)據(jù)存儲(chǔ)方式是將數(shù)據(jù)存儲(chǔ)在硬盤、光盤、U盤等設(shè)備中。但是這些設(shè)備需要我們手動(dòng)打開文件夾復(fù)制粘貼等繁瑣的操作才能找到需要的數(shù)據(jù)。而數(shù)據(jù)庫則是另外一種存儲(chǔ)方式,數(shù)據(jù)庫對(duì)各種數(shù)據(jù)進(jìn)行高效的管理,讓我們的數(shù)據(jù)操作變得更加方便快捷。在這篇文章中,我們將會(huì)為你介紹如何將文件夾中的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫中,從而實(shí)現(xiàn)更高效的數(shù)據(jù)管理方式。

1. 前置條件

在進(jìn)行文件夾傳至數(shù)據(jù)庫的操作之前,我們需要保證我們安裝了MySQL數(shù)據(jù)庫以及Java環(huán)境。如果你還沒有安裝,可以通過官方網(wǎng)站去下載并安裝。此外,我們還需要掌握一些基礎(chǔ)的Java編程知識(shí),以便進(jìn)行Java編程操作。

2. 數(shù)據(jù)庫表的設(shè)計(jì)

在將文件夾中的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫之前,我們需要先設(shè)計(jì)數(shù)據(jù)庫表結(jié)構(gòu),以便于我們存儲(chǔ)文件夾中的數(shù)據(jù)。我們可以在MySQL數(shù)據(jù)庫中創(chuàng)建一個(gè)名為“file”,包含三個(gè)字段:id、name和content。其中,id為整型,表示文件的唯一標(biāo)識(shí)符;name為字符串型,表示文件名;content為字符串型,表示文件內(nèi)容(我們可以將文件轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)后存儲(chǔ)至數(shù)據(jù)庫中)。通過這樣一個(gè)簡(jiǎn)單的表格設(shè)計(jì),我們就可以存儲(chǔ)文件夾中的數(shù)據(jù)了。

3. Java代碼實(shí)現(xiàn)

接下來我們需要進(jìn)行Java編程操作,將文件夾中的數(shù)據(jù)導(dǎo)入到我們所設(shè)計(jì)的數(shù)據(jù)庫表中。我們需要編寫一個(gè)Java程序,實(shí)現(xiàn)讀取文件夾中的數(shù)據(jù)并將其轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)的操作。代碼如下:

“`

import java.io.*;

public class BinaryFile {

public static byte[] read(File file) throws IOException {

BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(file));

try {

byte[] data = new byte[inputStream.avlable()];

inputStream.read(data);

return data;

} finally {

inputStream.close();

}

}

}

“`

上述代碼中,我們定義了一個(gè)二進(jìn)制文件操作類,它可以從文件中讀取二進(jìn)制數(shù)據(jù),并將其返回為一個(gè)字節(jié)數(shù)組。

接下來,我們需要編寫Java程序,實(shí)現(xiàn)將文件夾中的數(shù)據(jù)導(dǎo)入到我們所設(shè)計(jì)的數(shù)據(jù)庫表中。代碼如下:

“`

import java.io.File;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

public class ImportFile {

private static final String DB_URL = “jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8”;

private static final String USER_NAME = “root”;

private static final String PASSWORD = “root”;

private static final String INSERT_SQL = “INSERT INTO file (id, name, content) VALUES (?, ?, ?)”;

public static void mn(String[] args) {

Connection connection = null;

PreparedStatement statement = null;

try {

Class.forName(“com.mysql.jdbc.Driver”);

connection = DriverManager.getConnection(DB_URL, USER_NAME, PASSWORD);

File folder = new File(“C:/myfolder”);

File[] files = folder.listFiles();

for (int i = 0; i

File file = files[i];

statement = connection.prepareStatement(INSERT_SQL);

statement.setInt(1, i + 1);

statement.setString(2, file.getName());

statement.setBytes(3, BinaryFile.read(file));

statement.executeUpdate();

}

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

if (statement != null) statement.close();

if (connection != null) connection.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

“`

上述代碼中,我們通過連接MySQL數(shù)據(jù)庫,讀取文件夾中的數(shù)據(jù)并將其導(dǎo)入到我們所設(shè)計(jì)的數(shù)據(jù)庫表中。此代碼中,我們假設(shè)文件夾的路徑為“C:/myfolder”,并將其下的所有文件均導(dǎo)入到數(shù)據(jù)庫表中。

4. 結(jié)尾

通過上述步驟,我們就已經(jīng)完成了文件夾傳至數(shù)據(jù)庫的操作。相比于傳統(tǒng)的數(shù)據(jù)存儲(chǔ)方式,數(shù)據(jù)庫可以更加方便快捷地對(duì)數(shù)據(jù)進(jìn)行管理,提高了我們的數(shù)據(jù)操作效率。而通過Java編程實(shí)現(xiàn)文件夾傳至數(shù)據(jù)庫的操作,則讓我們可以輕松地實(shí)現(xiàn)這一高效的數(shù)據(jù)管理方式。

相關(guān)問題拓展閱讀:

  • 如何將大文件寫入到數(shù)據(jù)庫中
  • 文本文件導(dǎo)入到數(shù)據(jù)庫中的幾種方法(如何將文本文件導(dǎo)入數(shù)據(jù)庫表中)

如何將大文件寫入到數(shù)據(jù)庫中

最近利用空閑時(shí)間自己在寫一個(gè)文件備份工具,因?yàn)槲掖疟P上的很多文件很重要,例如很多PPT和講義。所以需要經(jīng)常備份,而且因?yàn)檫@些文件很多,所以需要增量備份。

我嘗試用過windows自帶的ntbackup工具,但感覺不是很爽。它不支持壓縮備份,而且界面也有點(diǎn)宏則復(fù)雜。

為了響應(yīng)偉大領(lǐng)袖的“自力更生,豐改衫衣足食”的號(hào)召,咱決定自己寫一個(gè)工具,專門備份到數(shù)據(jù)庫。支持壓縮,支持加密,支持增量。

本文分享一下其中一些重點(diǎn)的技術(shù)細(xì)節(jié)

其中一個(gè)關(guān)鍵的技術(shù)就是將文件使用二進(jìn)制的方式存放在數(shù)據(jù)庫的varbinary(max)的字段中。該字段更大允許的長(zhǎng)度為2GB。

對(duì)于一些小文件,我們可以一次性讀取它的所有字節(jié),然后一次提交到數(shù)據(jù)庫

///

/// 這個(gè)方法演示了如何一次提交所有的字節(jié)。這樣導(dǎo)致的結(jié)果是:應(yīng)用程序立即需要申請(qǐng)等同于文件大小的內(nèi)存

///

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();

}

}

}

但是,上面的方法有幾個(gè)問題,主要體現(xiàn)在如果文件比較大的話

1. 它需要一次性很大的內(nèi)存,具體數(shù)據(jù)等同于文件大小。因?yàn)镕ile.ReadAllBytes方法是將所有字節(jié)全部讀入到內(nèi)存。

2. 它會(huì)導(dǎo)致提交失敗,就是因?yàn)閿?shù)據(jù)太大了。數(shù)據(jù)庫也會(huì)拒絕。

那么,我就對(duì)這個(gè)方法做了一下改進(jìn),將文件拆分為5MB一段,也就是說,此時(shí)每次申請(qǐng)的內(nèi)存只有5MB。這就大大地提高了可用性。

///

/// 這個(gè)方法是將文件切分為5MB的塊,每次只是提交5MB,所以可能多次提交,但內(nèi)存占用就比較小

///

static void SubmitFileStepByStep() {

string file = @”F:\功夫熊貓.rmvb”;//以這個(gè)文件為例,大小為519MB,一共需要的時(shí)間大約94秒。還是有點(diǎn)慢的,所以還可能需要進(jìn)行壓縮

FileStream fs = new FileStream(file, FileMode.Open);

byte buffer = new byte;

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();

}

}

這樣的話,有一個(gè)后果就是一個(gè)文件,可能在數(shù)據(jù)庫中會(huì)有多條記錄。所以在讀取的時(shí)候,我們需要對(duì)其進(jìn)行合并

static void DownloadFile() {

string file = @”F:\功夫熊貓.rmvb”;

string destfile = @”E:\Temp\Temp.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;

fs.Write(buffer, 0, buffer.Length);

}

fs.Close();

reader.Close();

conn.Close();

}

}

}

文本文件導(dǎo)入到數(shù)據(jù)庫中的幾種方法(如何將文本文件導(dǎo)入數(shù)據(jù)庫表中)

這個(gè)如果要自己管理數(shù)據(jù)的話還是挺有難度的。

不過借用數(shù)據(jù)庫也許可以折中一下,把每個(gè)文檔譽(yù)磨悉的數(shù)據(jù)放到數(shù)據(jù)庫的一個(gè)字段中,然后用like’%…%’匹配慶乎。(下策^_^)

推薦使用桌面游咐搜索

文件夾怎么傳到數(shù)據(jù)庫的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于文件夾怎么傳到數(shù)據(jù)庫,「教你文件夾傳至數(shù)據(jù)庫的方法」,如何將大文件寫入到數(shù)據(jù)庫中,文本文件導(dǎo)入到數(shù)據(jù)庫中的幾種方法(如何將文本文件導(dǎo)入數(shù)據(jù)庫表中)的信息別忘了在本站進(jìn)行查找喔。

成都創(chuàng)新互聯(lián)建站主營(yíng):成都網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、網(wǎng)站改版的網(wǎng)站建設(shè)公司,提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、成都網(wǎng)站推廣、成都網(wǎng)站優(yōu)化seo、響應(yīng)式移動(dòng)網(wǎng)站開發(fā)制作等網(wǎng)站服務(wù)。


網(wǎng)站名稱:「教你文件夾傳至數(shù)據(jù)庫的方法」(文件夾怎么傳到數(shù)據(jù)庫)
文章轉(zhuǎn)載:http://www.dlmjj.cn/article/djsehpg.html